Messaging: Vendor chips, colorpicker, photoviewer, and vcard in-tree

Clone no longer depends on LineageOS gitlinks; the libraries used by the app live in this repo.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-29 06:19:53 +09:00
co-authored by Cursor
parent a6b23f0f3c
commit 49789fc4a5
239 changed files with 35551 additions and 4 deletions
@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2012 Google Inc.
Licensed to The Android Open Source Project.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources>
<style name="PhotoViewTheme" parent="android:Theme.Holo">
<item name="android:colorPrimaryDark">@color/photo_status_bar_black</item>
<item name="android:navigationBarColor">@color/photo_status_bar_black</item>
<item name="android:windowNoTitle">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@color/solid_black</item>
<item name="android:actionBarStyle">@style/Holo.ActionBar</item>
</style>
<style name="PhotoViewTheme.Translucent">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
<style name="PhotoViewTheme.NoActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
<style name="Holo.ActionBar" parent="android:Widget.Holo.ActionBar">
<item name="android:background">@drawable/actionbar_translucent</item>
</style>
</resources>
@@ -0,0 +1,76 @@
package com.android.ex.photo;
import android.app.ActionBar;
import android.graphics.drawable.Drawable;
/**
* Wrapper around {@link ActionBar}.
*/
public class ActionBarWrapper implements ActionBarInterface {
private final ActionBar mActionBar;
private class MenuVisiblityListenerWrapper implements ActionBar.OnMenuVisibilityListener {
private final ActionBarInterface.OnMenuVisibilityListener mWrapped;
public MenuVisiblityListenerWrapper(ActionBarInterface.OnMenuVisibilityListener wrapped) {
mWrapped = wrapped;
}
@Override
public void onMenuVisibilityChanged(boolean isVisible) {
mWrapped.onMenuVisibilityChanged(isVisible);
}
}
public ActionBarWrapper(ActionBar actionBar) {
mActionBar = actionBar;
}
@Override
public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
mActionBar.setDisplayHomeAsUpEnabled(showHomeAsUp);
}
@Override
public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
mActionBar.addOnMenuVisibilityListener(new MenuVisiblityListenerWrapper(listener));
}
@Override
public void setDisplayOptionsShowTitle() {
mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);
}
@Override
public CharSequence getTitle() {
return mActionBar.getTitle();
}
@Override
public void setTitle(CharSequence title) {
mActionBar.setTitle(title);
}
@Override
public void setSubtitle(CharSequence subtitle) {
mActionBar.setSubtitle(subtitle);
}
@Override
public void show() {
mActionBar.show();
}
@Override
public void hide() {
mActionBar.hide();
}
@Override
public void setLogo(Drawable logo) {
mActionBar.setLogo(logo);
}
}
@@ -0,0 +1,130 @@
/*
* Copyright (C) 2011 Google Inc.
* Licensed to The Android Open Source Project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.ex.photo;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
/**
* Activity to view the contents of an album.
*/
public class PhotoViewActivity extends FragmentActivity
implements PhotoViewController.ActivityInterface {
private PhotoViewController mController;
private ActionBarWrapper mActionBar;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mController = createController();
mController.onCreate(savedInstanceState);
}
public PhotoViewController createController() {
return new PhotoViewController(this);
}
@Override
public PhotoViewController getController() {
return mController;
}
@Override
protected void onStart() {
super.onStart();
mController.onStart();
}
@Override
protected void onResume() {
super.onResume();
mController.onResume();
}
@Override
protected void onPause() {
mController.onPause();
super.onPause();
}
@Override
protected void onStop() {
mController.onStop();
super.onStop();
}
@Override
protected void onDestroy() {
mController.onDestroy();
super.onDestroy();
}
@Override
public void onBackPressed() {
if (!mController.onBackPressed()) {
super.onBackPressed();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mController.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return mController.onCreateOptionsMenu(menu) || super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return mController.onPrepareOptionsMenu(menu) || super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return mController.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mController.onActivityResult(requestCode, resultCode, data);
}
@Override
public Context getContext() {
return this;
}
@Override
public ActionBarInterface getActionBarInterface() {
if (mActionBar == null) {
mActionBar = new ActionBarWrapper(getActionBar());
}
return mActionBar;
}
}