Index: demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
diff --git a/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..301563ffe66c0d4958c250c55f87ba52781488a2 |
--- /dev/null |
+++ b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java |
@@ -0,0 +1,278 @@ |
+// Copyright 2016 Google Inc. All Rights Reserved. |
+// |
+// 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 org.chromium.customtabsdemos; |
+ |
+import android.app.Dialog; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.graphics.Bitmap; |
+import android.graphics.Color; |
+import android.net.Uri; |
+import android.os.Bundle; |
+import android.provider.MediaStore; |
+import android.support.v7.app.AppCompatActivity; |
+import android.view.LayoutInflater; |
+import android.view.View; |
+import android.widget.ArrayAdapter; |
+import android.widget.Button; |
+import android.widget.EditText; |
+import android.widget.ImageView; |
+import android.widget.LinearLayout; |
+import android.widget.Spinner; |
+import android.widget.TextView; |
+ |
+import java.io.Serializable; |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * An activity for advanced UI settings. |
+ */ |
+public class AdvancedUISettingActivity extends AppCompatActivity implements View.OnClickListener{ |
+ public static final String KEY_PACKAGES_LIST = "packageNameList"; |
+ public static final String KEY_PACKAGE = "packageName"; |
+ public static final String KEY_COLOR = "color"; |
+ public static final String KEY_ACTION_ITEMS = "actionBarItems"; |
+ public static final String[] INTENTS_STRINGS = {"Send", "Select Contact", "Add Event", |
+ "Camera"}; |
+ |
+ private static final int PICK_IMAGE_REQUEST = 1; |
+ |
+ private Spinner mToolbarColorSpinner; |
+ private Spinner mPackageSpinner; |
+ private Button mSaveButton; |
+ private Button mAddActionBarItemButton; |
+ private List<String> mPackageNameList; |
+ private String mPackageName; |
+ private String mColor; |
+ private Dialog mAddActionBarItemDialog; |
+ |
+ private Uri mImage; |
+ private ArrayList<ActionButtonParams> mActionBarItems; |
+ |
+ /** |
+ * @return All possible colors. |
+ */ |
+ public static String[] getColors() { |
+ ArrayList<String> fieldList = new ArrayList<String>(); |
+ String colorName; |
+ for (int i = 0; i < Color.class.getFields().length; i ++) { |
+ colorName = Color.class.getFields()[i].getName(); |
+ // Make only the first character capitalized. |
+ fieldList.add(i, colorName.charAt(0) + colorName.substring(1).toLowerCase()); |
+ } |
+ return fieldList.toArray(new String[fieldList.size()]); |
+ } |
+ |
+ public static int stringToColor(String color) { |
+ try { |
+ return (int) Color.class.getField(color.toUpperCase()).get(new Color()); |
+ } catch (Exception e) { |
+ return 0; // Transparent. |
+ } |
+ } |
+ |
+ /** |
+ * Puts uri, instead of Bitmap in intent to save space. |
+ */ |
+ static Bitmap uriToBitMap(Context context, Uri uri) { |
+ try { |
+ return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri); |
+ } catch (Exception e) { |
+ return null; |
+ } |
+ } |
+ |
+ @Override |
+ protected void onCreate(Bundle savedInstanceState) { |
+ super.onCreate(savedInstanceState); |
+ setContentView(R.layout.advanced_ui_setting); |
+ mToolbarColorSpinner = (Spinner) findViewById(R.id.spinner_color); |
+ mPackageSpinner = (Spinner) findViewById(R.id.spinner_package); |
+ mSaveButton = (Button) findViewById(R.id.save_setting); |
+ mAddActionBarItemButton = (Button) findViewById(R.id.add_actionbar_item); |
+ mPackageNameList = CustomUIActivity.allSupportingPackageNames; |
+ mPackageName = CustomUIActivity.packageName; |
+ mColor = CustomUIActivity.toolbarColor; |
+ mActionBarItems = CustomUIActivity.mActionBarItems; |
+ mSaveButton.setOnClickListener(this); |
+ mAddActionBarItemButton.setOnClickListener(this); |
+ mToolbarColorSpinner.setAdapter(new ArrayAdapter<String>(this, |
+ android.R.layout.simple_spinner_dropdown_item, getColors())); |
+ mPackageSpinner.setAdapter(new ArrayAdapter<String>(this, |
+ android.R.layout.simple_spinner_dropdown_item, mPackageNameList)); |
+ |
+ selectUISetting(); |
+ } |
+ |
+ @Override |
+ public void onClick(View view) { |
+ switch (view.getId()) { |
+ case R.id.save_setting: |
+ sendUISettingToUIActivity(); |
+ finish(); |
+ break; |
+ case R.id.add_actionbar_item: |
+ showAddActionBarItemDialog(); |
+ break; |
+ case R.id.item_delete: |
+ deleteItem(view); |
+ break; |
+ } |
+ } |
+ |
+ public void onClickDialog(View view) { |
+ switch (view.getId()) { |
+ case R.id.save_item: |
+ saveActionBarItem(); |
+ // Only add the last item to the UI. |
+ displayActionBarItems(); |
+ mAddActionBarItemDialog.dismiss(); |
+ break; |
+ case R.id.cancel: |
+ mAddActionBarItemDialog.dismiss(); |
+ break; |
+ case R.id.select_file: |
+ selectFile(); |
+ break; |
+ } |
+ } |
+ |
+ @Override |
+ public void onActivityResult(int requestCode, int resultCode, Intent data) { |
+ super.onActivityResult(requestCode, resultCode, data); |
+ if ((requestCode == PICK_IMAGE_REQUEST)) { |
+ try { |
+ Uri uri = data.getData(); |
+ mImage = uri; |
+ ImageView image = (ImageView) mAddActionBarItemDialog |
+ .findViewById(R.id.imageInDialog); |
+ image.setImageBitmap(uriToBitMap(this, mImage)); |
+ image.requestLayout(); |
+ } catch (Exception e) { |
+ e.printStackTrace(); |
+ } |
+ } |
+ } |
+ |
+ /** |
+ * Displays action bar items. |
+ */ |
+ private void displayActionBarItems() { |
+ LayoutInflater inflater = (LayoutInflater)getBaseContext() |
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE); |
+ LinearLayout itemsList = (LinearLayout) findViewById(R.id.actionbar_items); |
+ itemsList.removeAllViews(); |
+ for (int i = 0; i < mActionBarItems.size(); i++) { |
+ View item = inflater.inflate(R.layout.display_action_bar_item_setting, null); |
+ ((TextView) item.findViewById(R.id.item_description)) |
+ .setText("Description: " + mActionBarItems.get(i).description); |
+ ((TextView) item.findViewById(R.id.item_intent)) |
+ .setText("Intent: " + mActionBarItems.get(i).intent); |
+ ((TextView) item.findViewById(R.id.item_image_title)).setText("Image: "); |
+ ImageView image = (ImageView) item.findViewById(R.id.item_image); |
+ image.setImageBitmap(uriToBitMap(this, Uri.parse(mActionBarItems.get(i).image))); |
+ Button deleteButton = (Button) item.findViewById(R.id.item_delete); |
+ deleteButton.setOnClickListener(this); |
+ itemsList.addView(item); |
+ } |
+ } |
+ |
+ private void selectFile() { |
+ Intent intent = new Intent(); |
+ intent.setType("image/*"); |
+ intent.setAction(Intent.ACTION_OPEN_DOCUMENT); |
+ startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); |
+ } |
+ |
+ private void deleteItem(View deleteButton) { |
+ LinearLayout lineLayout = (LinearLayout) deleteButton.getParent().getParent(); |
+ LinearLayout itemLayout = (LinearLayout) lineLayout.getParent(); |
+ LinearLayout itemsLayout = (LinearLayout) itemLayout.getParent(); |
+ int index = getIndexOfLayout(itemLayout, itemsLayout); |
+ itemsLayout.removeView(itemLayout); |
+ mActionBarItems.remove(index); |
+ } |
+ |
+ private int getIndexOfLayout(LinearLayout item, LinearLayout setting) { |
+ int kidsPos; |
+ for (kidsPos = 0; kidsPos < setting.getChildCount(); kidsPos ++) { |
+ View view = setting.getChildAt(kidsPos); |
+ if (view == item) { |
+ break; |
+ } |
+ } |
+ return kidsPos; |
+ } |
+ |
+ private void showAddActionBarItemDialog() { |
+ mAddActionBarItemDialog = new Dialog(this, R.style.DialogTheme); |
+ mAddActionBarItemDialog.setContentView(R.layout.dialog_add_actionbar_item); |
+ mAddActionBarItemDialog.setTitle("Add Action Bar Item"); |
+ ((Spinner) mAddActionBarItemDialog.findViewById(R.id.intent)) |
+ .setAdapter(new ArrayAdapter<String>(this, |
+ android.R.layout.simple_spinner_dropdown_item, INTENTS_STRINGS)); |
+ mImage = Uri.parse( |
+ "android.resource://org.chromium.customtabsdemos/drawable/ic_action_name"); |
+ |
+ mAddActionBarItemDialog.show(); |
+ } |
+ |
+ private void sendUISettingToUIActivity() { |
+ Intent intent = new Intent(); |
+ CustomUIActivity.packageName = mPackageSpinner.getSelectedItem().toString(); |
+ CustomUIActivity.toolbarColor = mToolbarColorSpinner.getSelectedItem().toString(); |
+ CustomUIActivity.mActionBarItems = mActionBarItems; |
+ setResult(0, intent); |
+ } |
+ |
+ private void saveActionBarItem() { |
+ ActionButtonParams actionItem = new ActionButtonParams(); |
+ actionItem.description = ((EditText) mAddActionBarItemDialog |
+ .findViewById(R.id.description)).getText().toString(); |
+ actionItem.image = mImage.toString(); |
+ actionItem.intent = ((Spinner) mAddActionBarItemDialog |
+ .findViewById(R.id.intent)).getSelectedItem().toString(); |
+ mActionBarItems.add(actionItem); |
+ } |
+ |
+ /** |
+ * Select UI setting previously set by the user. |
+ * If first time, select default UI setting from Custom UI Activity. |
+ */ |
+ private void selectUISetting() { |
+ for (int position = 0; position < mToolbarColorSpinner.getAdapter().getCount(); |
+ position ++) { |
+ if (mToolbarColorSpinner.getAdapter().getItem(position).equals(mColor)) { |
+ mToolbarColorSpinner.setSelection(position); |
+ break; |
+ } |
+ } |
+ for (int position = 0; position < mPackageSpinner.getAdapter().getCount(); position ++) { |
+ if (mPackageSpinner.getAdapter().getItem(position).equals(mPackageName)) { |
+ mPackageSpinner.setSelection(position); |
+ break; |
+ } |
+ } |
+ |
+ displayActionBarItems(); |
+ } |
+} |
+ |
+class ActionButtonParams implements Serializable{ |
Ian Wen
2016/03/16 01:35:30
1. indentation is wrong.
2. This class has to be a
|
+ String description; |
+ String intent; |
+ String image; |
+} |