From 7f549d6561d8d51f14ed488cdee2947188d0df4a Mon Sep 17 00:00:00 2001
From: NekoInverter <7741672-NekoInverter@users.noreply.gitlab.com>
Date: Fri, 18 Dec 2020 12:40:24 +0800
Subject: [PATCH] Migrate Hosts and SetSecurity to fragment
---
app/build.gradle | 2 +-
app/src/main/AndroidManifest.xml | 15 +--
.../HostsFragment.java} | 119 ++++++++----------
.../SetSecurityFragment.java} | 67 ++++------
app/src/main/res/xml/advanced_settings.xml | 6 +-
app/src/main/res/xml/privacy_settings.xml | 8 +-
6 files changed, 88 insertions(+), 129 deletions(-)
rename app/src/main/java/com/hippo/ehviewer/ui/{HostsActivity.java => fragment/HostsFragment.java} (71%)
rename app/src/main/java/com/hippo/ehviewer/ui/{SetSecurityActivity.java => fragment/SetSecurityFragment.java} (52%)
mode change 100755 => 100644
diff --git a/app/build.gradle b/app/build.gradle
index 1237f1320..e4c0f28af 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -83,7 +83,7 @@ dependencies {
implementation "androidx.fragment:fragment:1.2.5"
implementation "androidx.preference:preference:1.1.1"
implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'
- implementation 'com.google.android.material:material:1.3.0-alpha04'
+ implementation 'com.google.android.material:material:1.3.0-beta01'
implementation 'com.getkeepsafe.relinker:relinker:1.4.1'
implementation 'com.getkeepsafe.taptargetview:taptargetview:1.13.0'
implementation 'com.github.seven332.a7zip:extract-lite:1b21783'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 95dbb9cc3..d3c14c405 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -144,20 +144,13 @@
android:name="com.hippo.ehviewer.ui.SettingsActivity"
android:configChanges="screenSize|uiMode"
android:label="@string/settings"
- android:theme="@style/AppTheme.Toolbar"/>
+ android:theme="@style/AppTheme.Toolbar" />
-
-
-
-
-
> data;
@@ -68,31 +49,32 @@ public class HostsActivity extends ToolbarActivity
private HostsAdapter adapter;
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
+ public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- hosts = EhApplication.getHosts(this);
+ hosts = EhApplication.getHosts(requireContext());
data = hosts.getAll();
+ }
- setContentView(R.layout.activity_hosts);
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.activity_hosts, container, false);
setTitle(R.string.hosts);
- setNavigationIcon(R.drawable.v_arrow_left_dark_x24);
- recyclerView = findViewById(R.id.recycler_view);
- tip = findViewById(R.id.tip);
- FloatingActionButton fab = findViewById(R.id.fab);
+ recyclerView = view.findViewById(R.id.recycler_view);
+ tip = view.findViewById(R.id.tip);
+ FloatingActionButton fab = view.findViewById(R.id.fab);
adapter = new HostsAdapter();
recyclerView.setAdapter(adapter);
- recyclerView.setLayoutManager(new LinearLayoutManager(this, RecyclerView.VERTICAL, false));
+ recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity(), RecyclerView.VERTICAL, false));
LinearDividerItemDecoration decoration = new LinearDividerItemDecoration(
LinearDividerItemDecoration.VERTICAL,
- AttrResources.getAttrColor(this, R.attr.dividerColor),
- LayoutUtils.dp2pix(this, 1));
+ AttrResources.getAttrColor(requireActivity(), R.attr.dividerColor),
+ LayoutUtils.dp2pix(requireActivity(), 1));
decoration.setShowLastDivider(true);
recyclerView.addItemDecoration(decoration);
- //recyclerView.setSelector(Ripple.generateRippleDrawable(this, !AttrResources.getAttrBoolean(this, R.attr.isLightTheme), new ColorDrawable(Color.TRANSPARENT)));
recyclerView.setHasFixedSize(true);
- //recyclerView.setOnItemClickListener(this);
recyclerView.setPadding(
recyclerView.getPaddingLeft(),
recyclerView.getPaddingTop(),
@@ -103,17 +85,8 @@ public class HostsActivity extends ToolbarActivity
recyclerView.setVisibility(data.isEmpty() ? View.GONE : View.VISIBLE);
tip.setVisibility(data.isEmpty() ? View.VISIBLE : View.GONE);
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- finish();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
+ return view;
}
public boolean onItemClick(int position) {
@@ -124,14 +97,14 @@ public class HostsActivity extends ToolbarActivity
DialogFragment fragment = new EditHostDialogFragment();
fragment.setArguments(args);
- fragment.show(getSupportFragmentManager(), DIALOG_TAG_EDIT_HOST);
+ fragment.show(getChildFragmentManager(), DIALOG_TAG_EDIT_HOST);
return true;
}
@Override
public void onClick(View v) {
- new AddHostDialogFragment().show(getSupportFragmentManager(), DIALOG_TAG_ADD_HOST);
+ new AddHostDialogFragment().show(getChildFragmentManager(), DIALOG_TAG_ADD_HOST);
}
private void notifyHostsChanges() {
@@ -143,15 +116,15 @@ public class HostsActivity extends ToolbarActivity
public abstract static class HostDialogFragment extends DialogFragment {
- private TextView host;
- private TextView ip;
+ private HostsFragment hostsFragment;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
- View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_hosts, null, false);
- host = view.findViewById(R.id.host);
- ip = view.findViewById(R.id.ip);
+ hostsFragment = (HostsFragment) getParentFragment();
+ View view = getLayoutInflater().inflate(R.layout.dialog_hosts, null, false);
+ TextView host = view.findViewById(R.id.host);
+ TextView ip = view.findViewById(R.id.ip);
Bundle arguments = getArguments();
if (savedInstanceState == null && arguments != null) {
@@ -174,35 +147,45 @@ public class HostsActivity extends ToolbarActivity
protected void put(AlertDialog dialog) {
TextView host = dialog.findViewById(R.id.host);
TextView ip = dialog.findViewById(R.id.ip);
+ if (host == null || ip == null) {
+ return;
+ }
String hostString = host.getText().toString().trim().toLowerCase(Locale.US);
String ipString = ip.getText().toString().trim();
if (!Hosts.isValidHost(hostString)) {
TextInputLayout hostInputLayout = dialog.findViewById(R.id.host_input_layout);
- hostInputLayout.setError(getContext().getString(R.string.invalid_host));
+ if (hostInputLayout == null) {
+ return;
+ }
+ hostInputLayout.setError(getString(R.string.invalid_host));
return;
}
if (!Hosts.isValidIp(ipString)) {
TextInputLayout ipInputLayout = dialog.findViewById(R.id.ip_input_layout);
- ipInputLayout.setError(getContext().getString(R.string.invalid_ip));
+ if (ipInputLayout == null) {
+ return;
+ }
+ ipInputLayout.setError(getString(R.string.invalid_ip));
return;
}
- HostsActivity activity = (HostsActivity) dialog.getOwnerActivity();
- activity.hosts.put(hostString, ipString);
- activity.notifyHostsChanges();
+ hostsFragment.hosts.put(hostString, ipString);
+ hostsFragment.notifyHostsChanges();
dialog.dismiss();
}
protected void delete(AlertDialog dialog) {
TextView host = dialog.findViewById(R.id.host);
+ if (host == null) {
+ return;
+ }
String hostString = host.getText().toString().trim().toLowerCase(Locale.US);
- HostsActivity activity = (HostsActivity) dialog.getOwnerActivity();
- activity.hosts.delete(hostString);
- activity.notifyHostsChanges();
+ hostsFragment.hosts.delete(hostString);
+ hostsFragment.notifyHostsChanges();
dialog.dismiss();
}
@@ -234,13 +217,17 @@ public class HostsActivity extends ToolbarActivity
@Override
protected void onCreateDialog(AlertDialog dialog) {
- dialog.findViewById(R.id.host_input_layout).setEnabled(false);
+ TextInputLayout hostInputLayout = dialog.findViewById(R.id.host_input_layout);
+ if (hostInputLayout == null) {
+ return;
+ }
+ hostInputLayout.setEnabled(false);
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(v -> put(dialog));
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(v -> delete(dialog));
}
}
- private class HostsHolder extends RecyclerView.ViewHolder {
+ private static class HostsHolder extends RecyclerView.ViewHolder {
public final TextView host;
public final TextView ip;
@@ -275,4 +262,8 @@ public class HostsActivity extends ToolbarActivity
return data.size();
}
}
+
+ public void setTitle(@StringRes int string) {
+ requireActivity().setTitle(string);
+ }
}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SetSecurityFragment.java
old mode 100755
new mode 100644
similarity index 52%
rename from app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java
rename to app/src/main/java/com/hippo/ehviewer/ui/fragment/SetSecurityFragment.java
index 547bd55af..6cfcd3dfe
--- a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/SetSecurityFragment.java
@@ -1,29 +1,17 @@
-/*
- * Copyright 2016 Hippo Seven
- *
- * 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.hippo.ehviewer.ui;
+package com.hippo.ehviewer.ui.fragment;
import android.os.Bundle;
import android.text.TextUtils;
-import android.view.MenuItem;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.CheckBox;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
import androidx.biometric.BiometricManager;
+import androidx.fragment.app.Fragment;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.Settings;
@@ -31,7 +19,7 @@ import com.hippo.widget.lockpattern.LockPatternUtils;
import com.hippo.widget.lockpattern.LockPatternView;
import com.hippo.yorozuya.ViewUtils;
-public class SetSecurityActivity extends ToolbarActivity implements View.OnClickListener {
+public class SetSecurityFragment extends Fragment implements View.OnClickListener {
@Nullable
private LockPatternView mPatternView;
@@ -42,17 +30,16 @@ public class SetSecurityActivity extends ToolbarActivity implements View.OnClick
@Nullable
private CheckBox mFingerprint;
+ @Nullable
@Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_set_security);
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ View view = inflater.inflate(R.layout.activity_set_security, container, false);
setTitle(R.string.set_pattern_protection);
- setNavigationIcon(R.drawable.v_arrow_left_dark_x24);
- mPatternView = (LockPatternView) ViewUtils.$$(this, R.id.pattern_view);
- mCancel = ViewUtils.$$(this, R.id.cancel);
- mSet = ViewUtils.$$(this, R.id.set);
- mFingerprint = (CheckBox) ViewUtils.$$(this, R.id.fingerprint_checkbox);
+ mPatternView = (LockPatternView) ViewUtils.$$(view, R.id.pattern_view);
+ mCancel = ViewUtils.$$(view, R.id.cancel);
+ mSet = ViewUtils.$$(view, R.id.set);
+ mFingerprint = (CheckBox) ViewUtils.$$(view, R.id.fingerprint_checkbox);
String pattern = Settings.getSecurity();
if (!TextUtils.isEmpty(pattern)) {
@@ -60,36 +47,26 @@ public class SetSecurityActivity extends ToolbarActivity implements View.OnClick
LockPatternUtils.stringToPattern(pattern));
}
- if (BiometricManager.from(this).canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
+ if (BiometricManager.from(requireContext()).canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS) {
mFingerprint.setVisibility(View.VISIBLE);
mFingerprint.setChecked(Settings.getEnableFingerprint());
}
mCancel.setOnClickListener(this);
mSet.setOnClickListener(this);
+ return view;
}
@Override
- protected void onDestroy() {
- super.onDestroy();
+ public void onDestroyView() {
+ super.onDestroyView();
mPatternView = null;
}
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- finish();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
@Override
public void onClick(View v) {
if (v == mCancel) {
- finish();
+ requireActivity().onBackPressed();
} else if (v == mSet) {
if (null != mPatternView && null != mFingerprint) {
String security;
@@ -102,7 +79,11 @@ public class SetSecurityActivity extends ToolbarActivity implements View.OnClick
Settings.putEnableFingerprint(mFingerprint.getVisibility() == View.VISIBLE &&
mFingerprint.isChecked() && !security.isEmpty());
}
- finish();
+ requireActivity().onBackPressed();
}
}
+
+ public void setTitle(@StringRes int string) {
+ requireActivity().setTitle(string);
+ }
}
diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml
index e70444a99..385eba565 100644
--- a/app/src/main/res/xml/advanced_settings.xml
+++ b/app/src/main/res/xml/advanced_settings.xml
@@ -79,11 +79,11 @@
android:title="@string/settings_advanced_built_in_hosts_title"
app:iconSpaceReserved="false" />
-
-
+ android:defaultValue="true" />
+ app:dialogMessageLinkify="true" />