Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2531)

Unified Diff: demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java

Issue 1603383003: color, package and action bar configuration. (Closed) Base URL: https://github.com/GoogleChrome/custom-tabs-client.git@master
Patch Set: Added action bar configuration item. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..7450c60347722b8d3d9af41610daf169891ccece
--- /dev/null
+++ b/demos/src/main/java/org/chromium/customtabsdemos/AdvancedUISettingActivity.java
@@ -0,0 +1,257 @@
+// Copyright 2015 Google Inc. All Rights Reserved.
Ian Wen 2016/02/09 00:14:15 2016
BigBossZhiling 2016/02/09 01:03:11 Done.
+//
+// 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.ActionBar;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+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 org.chromium.customtabsclient.shared.CustomTabsHelper;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Advanced UI setting.
Ian Wen 2016/02/09 00:14:15 An activity for advanced UI settings.
+ */
+public class AdvancedUISettingActivity extends AppCompatActivity implements View.OnClickListener{
+ private Spinner mToolbarColorSpinner;
+ private Spinner mPackageSpinner;
+ private Button mSaveButton;
+ private Button mAddActionBarItemButton;
+ private List<String> packageNameList;
+ private String packageName;
+ private String color;
Ian Wen 2016/02/09 00:14:15 All memeber variables should start with an "m".
BigBossZhiling 2016/02/09 01:03:11 Done.
+ private Dialog addActionBarItemDialogue;
Ian Wen 2016/02/09 00:14:15 Use Dialog instead of Dialogue. Our names are long
BigBossZhiling 2016/02/09 01:03:11 Done.
+
+ private int PICK_IMAGE_REQUEST = 1;
Ian Wen 2016/02/09 00:14:15 Make this a static final and move it before dynami
BigBossZhiling 2016/02/09 01:03:11 Done.
+ private Uri imageInAddItemDialogue;
Ian Wen 2016/02/09 00:14:15 This is a uri, not a dialog.
BigBossZhiling 2016/02/09 01:03:11 Done.
+ private ArrayList<String> actionBarItemsDescription;
+ private ArrayList<Uri> actionBarItemsImage;
+ private ArrayList<String> actionBarItemsIntent;
+
+ @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);
+ packageNameList = (List<String>) getIntent().getSerializableExtra("packageNameList");
Ian Wen 2016/02/09 00:14:15 Make these strings (eg "packageNameList") public c
BigBossZhiling 2016/02/09 01:03:11 Done.
+ packageName = getIntent().getStringExtra("packageName");
+ color = getIntent().getStringExtra("color");
+ actionBarItemsDescription = (ArrayList<String>) getIntent()
+ .getSerializableExtra("itemsDescription");
+ actionBarItemsIntent = (ArrayList<String>) getIntent()
+ .getSerializableExtra("itemsIntent");
+ actionBarItemsImage = (ArrayList<Uri>) getIntent()
+ .getSerializableExtra("itemsImage");
+ mSaveButton.setOnClickListener(this);
+ mAddActionBarItemButton.setOnClickListener(this);
+ mToolbarColorSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row,
+ R.id.item,
+ CustomTabsHelper.getColors()));
+
+ mPackageSpinner.setAdapter(new ArrayAdapter<String>(this, R.layout.row,
Ian Wen 2016/02/09 00:14:15 Use android.R.layout.simple_spinner_dropdown_item
BigBossZhiling 2016/02/09 01:03:11 I tried R.layout.simple_spinner_dropdown_item, but
+ R.id.item, packageNameList));
+
+ // Select UI setting previously set by the user.
+ // If first time, select default UI setting from Custom UI Activity.
+ selectUISetting();
+ }
+
+ @Override
+ public void onClick(View view) {
+ switch (view.getId()) {
+ case R.id.save_setting:
+ sendUISettingToUIActivity();
+ finish();
+ break;
+ case R.id.add_actionbar_item:
+ addActionBarItemDialogue();
+ break;
+ case R.id.save_item:
+ saveActionBarItem();
+ // Only add the last item to the UI.
+ displayActionBarItems(actionBarItemsDescription.size() - 1,
+ actionBarItemsDescription.size());
+ addActionBarItemDialogue.dismiss();
+ break;
+ case R.id.cancel:
+ addActionBarItemDialogue.dismiss();
+ break;
+ case R.id.select_file:
+ selectFile();
+ break;
+ case R.id.item_delete:
+ deleteItem(view);
+ 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();
+ imageInAddItemDialogue = uri;
+ ImageView image = (ImageView) addActionBarItemDialogue
+ .findViewById(R.id.imageInDialogue);
+ image.setImageBitmap(uriToBitMap(this, imageInAddItemDialogue));
+ image.requestLayout();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // Put uri, instead of Bitmap in intent to save space.
Ian Wen 2016/02/09 00:14:15 Switch to javadoc and use "Puts" instead of "put".
BigBossZhiling 2016/02/09 01:03:11 Done.
+ static Bitmap uriToBitMap(Context context, Uri uri) {
Ian Wen 2016/02/09 00:14:15 Static methods should be placed before dynamic met
BigBossZhiling 2016/02/09 01:03:11 Done.
+ try {
+ return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+ /**
+ * Display of items stored in the arraylist from index startIndex to endInde.
Ian Wen 2016/02/09 00:14:16 endInde. Typo.
Ian Wen 2016/02/09 00:14:16 Displays items......
BigBossZhiling 2016/02/09 01:03:11 Done.
BigBossZhiling 2016/02/09 01:03:11 Done.
+ * @param startIndex is the starting index.
+ * @param endIndex is the ending index.
+ */
+ private void displayActionBarItems(int startIndex, int endIndex) {
+ LayoutInflater inflater = (LayoutInflater)getBaseContext()
+ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ LinearLayout setting = (LinearLayout) findViewById(R.id.advanced_ui_setting_linear_layout);
+ // Start position is the index in the layout to add action bar item
+ // Start position is the third last index.
+ int startPosition = setting.getChildCount() - 2;
+ for (int i = startIndex; i < endIndex; i++) {
+ View item = inflater.inflate(R.layout.display_action_bar_item_setting, null);
+ ((TextView) item.findViewById(R.id.item_description))
+ .setText("Description: " + actionBarItemsDescription.get(i));
+ ((TextView) item.findViewById(R.id.item_intent))
+ .setText("Intent: " + actionBarItemsIntent.get(i));
+ ((TextView) item.findViewById(R.id.item_image_title)).setText("Image: ");
+ ImageView image = (ImageView) item.findViewById(R.id.item_image);
+ image.setImageBitmap(uriToBitMap(this, actionBarItemsImage.get(i)));
+ Button deleteButton = (Button) item.findViewById(R.id.item_delete);
+ deleteButton.setOnClickListener(this);
+ setting.addView(item, startPosition);
Ian Wen 2016/02/09 00:14:15 You can directly say addView, without giving it a
BigBossZhiling 2016/02/09 01:03:11 Yes I can, but I think I don't want to add the vie
+ startPosition += 1;
+
Ian Wen 2016/02/09 00:14:15 Remove empty line.
BigBossZhiling 2016/02/09 01:03:11 Done.
+ }
+ }
+
+ 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 buttonLayout = (LinearLayout) deleteButton.getParent();
+ LinearLayout lineLayout = (LinearLayout) buttonLayout.getParent();
+ LinearLayout itemLayout = (LinearLayout) lineLayout.getParent();
+ LinearLayout settingLayout = (LinearLayout) itemLayout.getParent();
+ int index = getIndexOfLayout(R.id.actiona_bar_item, itemLayout, settingLayout);
+ settingLayout.removeView(itemLayout);
+ actionBarItemsDescription.remove(index);
+ actionBarItemsImage.remove(index);
+ actionBarItemsIntent.remove(index);
+ }
+
+ private int getIndexOfLayout(int type, LinearLayout item, LinearLayout setting) {
+ int currentIndex = 0;
+ for (int kidsPos = 0; kidsPos < setting.getChildCount(); kidsPos ++) {
+ View view = setting.getChildAt(kidsPos);
+ // Check whether is the item we are searching for.
+ if (view.getId() == type && view != item) {
+ currentIndex += 1;
+ }
+ }
+ return currentIndex;
+ }
+
+ private void addActionBarItemDialogue() {
Ian Wen 2016/02/09 00:14:15 This method shows a dialog, not "add". I would use
BigBossZhiling 2016/02/09 01:03:11 Done.
+ addActionBarItemDialogue = new Dialog(this, R.style.DialogTheme);
+ addActionBarItemDialogue.setContentView(R.layout.dialogue_add_actionbar_item);
+ addActionBarItemDialogue.setTitle("Add Action Bar Item");
+ addActionBarItemDialogue.findViewById(R.id.save_item).setOnClickListener(this);
+ addActionBarItemDialogue.findViewById(R.id.cancel).setOnClickListener(this);
+ addActionBarItemDialogue.findViewById(R.id.select_file).setOnClickListener(this);
+ ((Spinner) addActionBarItemDialogue.findViewById(R.id.intent))
+ .setAdapter(new ArrayAdapter<String>(this, R.layout.row, R.id.item, getIntents()));
+ imageInAddItemDialogue = Uri.parse(
+ "android.resource://org.chromium.customtabsdemos/drawable/ic_action_name");
+
+ addActionBarItemDialogue.show();
+ }
+
+ private String[] getIntents() {
+ return new String[] {"Send", "Select Contact", "Add Event", "Camera"};
+ }
+
+ private void sendUISettingToUIActivity() {
+ Intent intent = new Intent();
+ intent.putExtra("packageName", mPackageSpinner.getSelectedItem().toString());
+ intent.putExtra("color", mToolbarColorSpinner.getSelectedItem().toString());
+ intent.putExtra("itemsDescription", actionBarItemsDescription);
+ intent.putExtra("itemsImage", actionBarItemsImage);
+ intent.putExtra("itemsIntent", actionBarItemsIntent);
+ setResult(0, intent);
+ }
+
+ private void saveActionBarItem() {
+ actionBarItemsDescription.add(((EditText) addActionBarItemDialogue
+ .findViewById(R.id.description)).getText().toString());
+ actionBarItemsImage.add(imageInAddItemDialogue);
+ actionBarItemsIntent.add(((Spinner) addActionBarItemDialogue
+ .findViewById(R.id.intent)).getSelectedItem().toString());
+ }
+
+ private void selectUISetting() {
+ for (int position = 0; position < mToolbarColorSpinner.getAdapter().getCount();
+ position ++) {
+ if (mToolbarColorSpinner.getAdapter().getItem(position).equals(color)) {
+ mToolbarColorSpinner.setSelection(position);
+ break;
+ }
+ }
+ for (int position = 0; position < mPackageSpinner.getAdapter().getCount(); position ++) {
+ if (mPackageSpinner.getAdapter().getItem(position).equals(packageName)) {
+ mPackageSpinner.setSelection(position);
+ break;
+ }
+ }
+
+ displayActionBarItems(0, actionBarItemsDescription.size());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698