mirror of
https://github.com/emanuele-f/PCAPdroid.git
synced 2026-07-03 21:21:12 +08:00
Keep search query on screen rotation in VPN exceptions
This commit is contained in:
parent
7b15559d07
commit
a620d914b7
@ -66,6 +66,7 @@ import android.text.TextUtils;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
@ -1274,4 +1275,16 @@ public class Utils {
|
||||
} else
|
||||
man.notify(id, notification);
|
||||
}
|
||||
|
||||
// Set the SearchView query and expand it
|
||||
public static void setSearchQuery(SearchView searchView, MenuItem searchItem, String query) {
|
||||
searchView.setIconified(false);
|
||||
searchItem.expandActionView();
|
||||
|
||||
searchView.setIconified(false);
|
||||
searchItem.expandActionView();
|
||||
|
||||
// Delay otherwise the query won't be set when the activity is just started
|
||||
searchView.post(() -> searchView.setQuery(query, true));
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,17 +37,30 @@ import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class VpnExceptionsActivity extends BaseActivity {
|
||||
private VpnExceptionsFragment mFragment;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setTitle(R.string.vpn_exceptions);
|
||||
setContentView(R.layout.fragment_activity);
|
||||
|
||||
if(savedInstanceState != null)
|
||||
mFragment = (VpnExceptionsFragment) getSupportFragmentManager().getFragment(savedInstanceState, "fragment");
|
||||
if(mFragment == null)
|
||||
mFragment = new VpnExceptionsFragment();
|
||||
|
||||
getSupportFragmentManager().beginTransaction()
|
||||
.replace(R.id.fragment, new VpnExceptionsFragment())
|
||||
.replace(R.id.fragment, mFragment)
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
getSupportFragmentManager().putFragment(outState, "fragment", mFragment);
|
||||
}
|
||||
|
||||
public static class VpnExceptionsFragment extends AppsToggles {
|
||||
private static final String TAG = "VpnExceptions";
|
||||
private final Set<String> mExcludedApps = new HashSet<>();
|
||||
|
||||
@ -20,9 +20,11 @@
|
||||
package com.emanuelef.remote_capture.fragments;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
@ -35,6 +37,7 @@ import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.emanuelef.remote_capture.AppsLoader;
|
||||
import com.emanuelef.remote_capture.R;
|
||||
import com.emanuelef.remote_capture.Utils;
|
||||
import com.emanuelef.remote_capture.adapters.AppsTogglesAdapter;
|
||||
import com.emanuelef.remote_capture.interfaces.AppsLoadListener;
|
||||
import com.emanuelef.remote_capture.model.AppDescriptor;
|
||||
@ -47,9 +50,11 @@ import kotlin.NotImplementedError;
|
||||
|
||||
public abstract class AppsToggles extends Fragment implements AppsLoadListener,
|
||||
AppsTogglesAdapter.AppToggleListener, SearchView.OnQueryTextListener {
|
||||
private static final String TAG = "AppsToggles";
|
||||
private AppsTogglesAdapter mAdapter;
|
||||
private SearchView mSearchView;
|
||||
private TextView mEmptyText;
|
||||
private String mQueryToApply;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater,
|
||||
@ -71,16 +76,50 @@ public abstract class AppsToggles extends Fragment implements AppsLoadListener,
|
||||
mEmptyText.setText(R.string.loading_apps);
|
||||
recyclerView.setEmptyView(mEmptyText);
|
||||
|
||||
if(savedInstanceState != null) {
|
||||
String filter = savedInstanceState.getString("filter");
|
||||
if((filter != null) && !filter.isEmpty())
|
||||
mQueryToApply = filter;
|
||||
}
|
||||
|
||||
Log.d(TAG, "mQueryToApply: " + mQueryToApply);
|
||||
|
||||
(new AppsLoader((AppCompatActivity) requireActivity()))
|
||||
.setAppsLoadListener(this)
|
||||
.loadAllApps();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
|
||||
if(mSearchView != null)
|
||||
mQueryToApply = mSearchView.getQuery().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater menuInflater) {
|
||||
menuInflater.inflate(R.menu.search_menu, menu);
|
||||
mSearchView = (SearchView) menu.findItem(R.id.search).getActionView();
|
||||
MenuItem searchItem = menu.findItem(R.id.search);
|
||||
mSearchView = (SearchView) searchItem.getActionView();
|
||||
mSearchView.setOnQueryTextListener(this);
|
||||
|
||||
if((mQueryToApply != null) && (!mQueryToApply.isEmpty())) {
|
||||
Log.d(TAG, "Initial filter: " + mQueryToApply);
|
||||
Utils.setSearchQuery(mSearchView, searchItem, mQueryToApply);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
|
||||
// this is complemented by the activity onSaveInstanceState
|
||||
if(mSearchView != null) {
|
||||
String query = mSearchView.getQuery().toString();
|
||||
Log.d(TAG, "Saving filter: " + query);
|
||||
outState.putString("filter", query);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -556,14 +556,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
|
||||
}
|
||||
|
||||
private void setQuery(String query) {
|
||||
mSearchView.setIconified(false);
|
||||
mMenuItemSearch.expandActionView();
|
||||
|
||||
mSearchView.setIconified(false);
|
||||
mMenuItemSearch.expandActionView();
|
||||
|
||||
// Delay otherwise the query won't be set when the activity is just started.
|
||||
mSearchView.post(() -> mSearchView.setQuery(query, true));
|
||||
Utils.setSearchQuery(mSearchView, mMenuItemSearch, query);
|
||||
}
|
||||
|
||||
private void recheckScroll() {
|
||||
|
||||
@ -4,7 +4,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:orientation="horizontal"
|
||||
android:padding="4dp"
|
||||
android:paddingHorizontal="4dp"
|
||||
android:paddingVertical="8dp"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
||||
@ -3,13 +3,10 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<!-- NOTE: "always|collapseActionView" must be set to prevent the search button from
|
||||
disappearing and to avoid hiding the other elements. -->
|
||||
<item
|
||||
android:id="@+id/search"
|
||||
android:title="@string/search"
|
||||
android:icon="@drawable/ic_search"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="always|collapseActionView"
|
||||
tools:ignore="AlwaysShowAction" />
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
||||
Loading…
Reference in New Issue
Block a user