Add widget stack activity

ADd settings option for widget stack
This commit is contained in:
Deep
2020-10-17 13:02:40 -04:00
parent fa441de66d
commit 3be1f40271
10 changed files with 139 additions and 89 deletions
+1 -1
View File
@@ -728,7 +728,7 @@ brave_java_resources = [
"java/res/layout/fragment_brave_rewards_onboarding.xml",
"java/res/layout/fragment_cross_promotional_modal_dialog.xml",
"java/res/layout/fragment_crypto_widget_bottom_sheet_dialog.xml",
"java/res/layout/fragment_ntp_widget_bottom_sheet_dialog.xml",
"java/res/layout/activity_ntp_widget_stack.xml",
"java/res/layout/fragment_onboarding_v2.xml",
"java/res/layout/fragment_qr_code_share.xml",
"java/res/layout/fragment_rate_dialog.xml",
+1 -1
View File
@@ -66,11 +66,11 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPageLayout.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/IncognitoNewTabPageView.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetBottomSheetDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetItem.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetListAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetManager.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/SwipeAndDragHelper.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp/widget/NTPWidgetStackActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/NTPBackgroundImagesBridge.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/RewardsBottomSheetDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/ntp_background_images/model/BackgroundImage.java",
+7
View File
@@ -39,6 +39,13 @@
</activity>
<activity
android:name="org.chromium.chrome.browser.ntp.widget.NTPWidgetStackActivity"
android:theme="@style/Theme.Chromium.Activity"
android:screenOrientation="sensorPortrait">
</activity>
<activity
android:name="org.chromium.chrome.browser.widget.crypto.binance.BinanceActivity"
android:theme="@style/Theme.Chromium.Activity.Fullscreen">
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.ntp;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
@@ -62,7 +63,7 @@ import org.chromium.chrome.browser.native_page.ContextMenuManager;
import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder;
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetAdapter;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetBottomSheetDialogFragment;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetStackActivity;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetItem;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetManager;
import org.chromium.chrome.browser.ntp_background_images.NTPBackgroundImagesBridge;
@@ -136,6 +137,7 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
private BinanceNativeWorker mBinanceNativeWorker;
private CountDownTimer countDownTimer = null;
private List<NTPWidgetItem> widgetList = new ArrayList<NTPWidgetItem>();
public static final int NTP_WIDGET_STACK_CODE = 3333;
public BraveNewTabPageLayout(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -365,6 +367,19 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
super.onDetachedFromWindow();
}
// @Override
// public void onWindowFocusChanged(boolean hasWindowFocus) {
// super.onWindowFocusChanged(hasWindowFocus);
// if (hasWindowFocus) {
// //onresume() called
// showWidgets();
// Log.e("NTP", "onResume new tab");
// } else {
// // onPause() called
// Log.e("NTP", "onPause new tab");
// }
// }
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (sponsoredTab != null && NTPUtil.shouldEnableNTPFeature()) {
@@ -714,13 +729,21 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
@Override
public void onMenuEdit() {
cancelTimer();
NTPWidgetBottomSheetDialogFragment ntpWidgetBottomSheetDialogFragment =
NTPWidgetBottomSheetDialogFragment.newInstance();
ntpWidgetBottomSheetDialogFragment.setNTPWidgetListener(ntpWidgetListener);
// ntpWidgetBottomSheetDialogFragment.setWidgetList(widgetList);
ntpWidgetBottomSheetDialogFragment.show(
((BraveActivity) mActivity).getSupportFragmentManager(),
"NTPWidgetBottomSheetDialogFragment");
// final FragmentManager fm = ((BraveActivity) mActivity).getSupportFragmentManager();
// Fragment auxiliary = new Fragment() {
// @Override
// public void onActivityResult(int requestCode, int resultCode, Intent data) {
// //DO WHATEVER YOU NEED
// super.onActivityResult(requestCode, resultCode, data);
// fm.beginTransaction().remove(this).commit();
// }
// };
// fm.beginTransaction().add(auxiliary, "FRAGMENT_TAG").commit();
// fm.executePendingTransactions();
// auxiliary.startActivityForResult(new Intent(mActivity, NTPWidgetStackActivity.class), NTP_WIDGET_STACK_CODE);
Intent ntpWidgetStackActivityIntent = new Intent(mActivity, NTPWidgetStackActivity.class);
mActivity.startActivity(ntpWidgetStackActivityIntent);
}
@Override
@@ -744,16 +767,6 @@ public class BraveNewTabPageLayout extends NewTabPageLayout {
public void onMenuDisconnect() {
mBinanceNativeWorker.revokeToken();
}
@Override
public void onBottomSheetDismiss() {
showWidgets();
cancelTimer();
if (ntpWidgetViewPager.getCurrentItem()
== NTPWidgetManager.getInstance().getBinanceWidget()) {
startTimer();
}
}
};
private BinanceObserver mBinanaceObserver = new BinanceObserver() {
@@ -53,8 +53,6 @@ public class NTPWidgetAdapter extends PagerAdapter {
void onMenuRefreshData();
void onMenuDisconnect();
void onBottomSheetDismiss();
}
public void setNTPWidgetListener(NTPWidgetListener ntpWidgetListener) {
@@ -21,6 +21,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetAdapter;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetManager;
import org.chromium.chrome.browser.ntp.widget.SwipeAndDragHelper;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetStackActivity;
import java.util.List;
@@ -29,7 +30,7 @@ public class NTPWidgetListAdapter extends RecyclerView.Adapter<RecyclerView.View
private List<String> widgetList;
private ItemTouchHelper touchHelper;
private NTPWidgetAdapter.NTPWidgetListener ntpWidgetListener;
private NTPWidgetBottomSheetDialogFragment
private NTPWidgetStackActivity
.NTPWidgetStackUpdateListener ntpWidgetStackUpdateListener;
private int ntpWidgetType;
@@ -38,7 +39,7 @@ public class NTPWidgetListAdapter extends RecyclerView.Adapter<RecyclerView.View
}
public void setNTPWidgetStackUpdateListener(
NTPWidgetBottomSheetDialogFragment
NTPWidgetStackActivity
.NTPWidgetStackUpdateListener ntpWidgetStackUpdateListener) {
this.ntpWidgetStackUpdateListener = ntpWidgetStackUpdateListener;
}
@@ -62,7 +63,7 @@ public class NTPWidgetListAdapter extends RecyclerView.Adapter<RecyclerView.View
NTPWidgetItem ntpWidgetItem = NTPWidgetManager.mWidgetsMap.get(widgetList.get(position));
ntpWidgetViewHolder.widgetTitle.setText(ntpWidgetItem.getWidgetTitle());
ntpWidgetViewHolder.widgetText.setText(ntpWidgetItem.getWidgetText());
if (ntpWidgetType == NTPWidgetBottomSheetDialogFragment.USED_WIDGET) {
if (ntpWidgetType == NTPWidgetStackActivity.USED_WIDGET) {
ntpWidgetViewHolder.widgetReorderView.setImageResource(R.drawable.ic_sort);
ntpWidgetViewHolder.widgetReorderView.setOnTouchListener(new View.OnTouchListener() {
@Override
@@ -73,7 +74,7 @@ public class NTPWidgetListAdapter extends RecyclerView.Adapter<RecyclerView.View
return false;
}
});
} else if (ntpWidgetType == NTPWidgetBottomSheetDialogFragment.AVAILABLE_WIDGET) {
} else if (ntpWidgetType == NTPWidgetStackActivity.AVAILABLE_WIDGET) {
ntpWidgetViewHolder.widgetReorderView.setImageResource(R.drawable.ic_add);
ntpWidgetViewHolder.widgetReorderView.setOnClickListener(new View.OnClickListener() {
@Override
@@ -1,24 +1,24 @@
/* Copyright (c) 2020 The Brave Authors. All rights reserved.
/**
* Copyright (c) 2020 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.chromium.chrome.browser.ntp.widget;
import android.content.DialogInterface;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import androidx.appcompat.app.AppCompatActivity;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetAdapter;
@@ -28,7 +28,7 @@ import org.chromium.chrome.browser.ntp.widget.NTPWidgetManager;
import java.util.ArrayList;
import java.util.List;
public class NTPWidgetBottomSheetDialogFragment extends BottomSheetDialogFragment {
public class NTPWidgetStackActivity extends AppCompatActivity {
private NTPWidgetAdapter.NTPWidgetListener ntpWidgetListener;
private RecyclerView usedWidgetsRecyclerView;
private RecyclerView availableWidgetsRecyclerView;
@@ -46,26 +46,24 @@ public class NTPWidgetBottomSheetDialogFragment extends BottomSheetDialogFragmen
this.ntpWidgetListener = ntpWidgetListener;
}
public static NTPWidgetBottomSheetDialogFragment newInstance() {
return new NTPWidgetBottomSheetDialogFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_ntp_widget_bottom_sheet_dialog, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ntp_widget_stack);
List<String> usedWidgetList = NTPWidgetManager.getInstance().getUsedWidgets();
List<String> availableWidgetList = NTPWidgetManager.getInstance().getAvailableWidgets();
usedWidgetsRecyclerView = view.findViewById(R.id.used_widget_list);
usedWidgetsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
ImageView backButton = findViewById(R.id.back_button);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
usedWidgetsRecyclerView = findViewById(R.id.used_widget_list);
usedWidgetsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
usedNtpWidgetListAdapter = new NTPWidgetListAdapter();
SwipeAndDragHelper swipeAndDragHelper = new SwipeAndDragHelper(usedNtpWidgetListAdapter);
ItemTouchHelper touchHelper = new ItemTouchHelper(swipeAndDragHelper);
@@ -77,10 +75,10 @@ public class NTPWidgetBottomSheetDialogFragment extends BottomSheetDialogFragmen
touchHelper.attachToRecyclerView(usedWidgetsRecyclerView);
usedNtpWidgetListAdapter.setWidgetList(usedWidgetList);
availableWidgetLayout = view.findViewById(R.id.available_widget_layout);
availableWidgetLayout = findViewById(R.id.available_widget_layout);
availableWidgetsRecyclerView = view.findViewById(R.id.available_widget_list);
availableWidgetsRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
availableWidgetsRecyclerView = findViewById(R.id.available_widget_list);
availableWidgetsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
availableNtpWidgetListAdapter = new NTPWidgetListAdapter();
availableNtpWidgetListAdapter.setNTPWidgetListener(ntpWidgetListener);
availableNtpWidgetListAdapter.setNTPWidgetStackUpdateListener(ntpWidgetStackUpdateListener);
@@ -95,33 +93,32 @@ public class NTPWidgetBottomSheetDialogFragment extends BottomSheetDialogFragmen
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
protected void onStop() {
for (int i = 0; i < usedNtpWidgetListAdapter.getWidgetList().size(); i++) {
NTPWidgetManager.getInstance().setWidget(
usedNtpWidgetListAdapter.getWidgetList().get(i), i);
usedNtpWidgetListAdapter.getWidgetList().get(i), i);
}
ntpWidgetListener.onBottomSheetDismiss();
super.onStop();
}
private NTPWidgetStackUpdateListener ntpWidgetStackUpdateListener =
new NTPWidgetStackUpdateListener() {
@Override
public void onWidgetStackUpdate() {
List<String> usedWidgetList = NTPWidgetManager.getInstance().getUsedWidgets();
List<String> availableWidgetList =
NTPWidgetManager.getInstance().getAvailableWidgets();
new NTPWidgetStackUpdateListener() {
@Override
public void onWidgetStackUpdate() {
List<String> usedWidgetList = NTPWidgetManager.getInstance().getUsedWidgets();
List<String> availableWidgetList =
NTPWidgetManager.getInstance().getAvailableWidgets();
usedNtpWidgetListAdapter.setWidgetList(usedWidgetList);
usedNtpWidgetListAdapter.notifyDataSetChanged();
usedNtpWidgetListAdapter.setWidgetList(usedWidgetList);
usedNtpWidgetListAdapter.notifyDataSetChanged();
if (availableWidgetList.size() > 0) {
availableWidgetLayout.setVisibility(View.VISIBLE);
availableNtpWidgetListAdapter.setWidgetList(availableWidgetList);
availableNtpWidgetListAdapter.notifyDataSetChanged();
} else {
availableWidgetLayout.setVisibility(View.GONE);
}
}
};
if (availableWidgetList.size() > 0) {
availableWidgetLayout.setVisibility(View.VISIBLE);
availableNtpWidgetListAdapter.setWidgetList(availableWidgetList);
availableNtpWidgetListAdapter.notifyDataSetChanged();
} else {
availableWidgetLayout.setVisibility(View.GONE);
}
}
};
}
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.settings;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.content.Intent;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
@@ -21,17 +22,19 @@ import org.chromium.chrome.browser.settings.BravePreferenceFragment;
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.SettingsUtils;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.chrome.browser.ntp.widget.NTPWidgetStackActivity;
/**
* Fragment to keep track of all the display related preferences.
*/
public class BackgroundImagesPreferences extends BravePreferenceFragment
implements OnPreferenceChangeListener {
implements OnPreferenceChangeListener {
// deprecated preferences from browser-android-tabs
public static final String PREF_SHOW_BACKGROUND_IMAGES = "show_background_images";
public static final String PREF_SHOW_SPONSORED_IMAGES = "show_sponsored_images";
public static final String PREF_SHOW_NON_DISTRUPTIVE_BANNER = "show_non_distruptive_banner";
public static final String PREF_WIDGET_STACK = "widget_stack";
private ChromeSwitchPreference showBackgroundImagesPref;
private ChromeSwitchPreference showSponsoredImagesPref;
@@ -47,6 +50,7 @@ public class BackgroundImagesPreferences extends BravePreferenceFragment
if (!NTPBackgroundImagesBridge.enableSponsoredImages()) {
removePreferenceIfPresent(PREF_SHOW_SPONSORED_IMAGES);
}
initWidgetStack();
}
private void removePreferenceIfPresent(String key) {
@@ -100,4 +104,15 @@ public class BackgroundImagesPreferences extends BravePreferenceFragment
sharedPreferencesEditor.putInt(preferenceName, newValue);
sharedPreferencesEditor.apply();
}
private void initWidgetStack() {
findPreference(PREF_WIDGET_STACK).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent ntpWidgetStackActivityIntent = new Intent(getActivity(), NTPWidgetStackActivity.class);
getActivity().startActivity(ntpWidgetStackActivityIntent);
return true;
}
});
}
}
@@ -12,20 +12,35 @@
android:orientation="vertical"
android:background="#F3F3F3">
<TextView
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_gravity="center"
android:text="@string/widget_stack"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@android:color/black"/>
android:orientation="horizontal">
<ImageView
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:padding="16dp"
app:srcCompat="@drawable/ic_back"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_gravity="center"
android:text="@string/widget_stack"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@android:color/black"/>
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="14dp"
@@ -34,7 +49,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/used_widget_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="wrap_content" />
</androidx.cardview.widget.CardView>
@@ -54,7 +69,7 @@
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardBackgroundColor="#FFFFFF"
app:cardCornerRadius="14dp"
@@ -63,7 +78,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/available_widget_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="wrap_content" />
</androidx.cardview.widget.CardView>
@@ -19,4 +19,8 @@
android:summaryOn="@string/text_on"
android:summaryOff="@string/text_off" />
<Preference
android:key="widget_stack"
android:title="@string/widget_stack"/>
</PreferenceScreen>