Skip to content

Commit

Permalink
[SVN] r3205 Inventory in /Libraries/twister-lib-android/
Browse files Browse the repository at this point in the history
[MOD] Use latest support library (28.0.0) in the app
[EXP] TWiStErRob/net.twisterrob.inventory#164 work around NotificationCompat.Builder's deprecated constructor via FAKE_CHANNEL_ID
[REM] TWiStErRob/net.twisterrob.inventory#164 Inline deprecated methods to use their API 14+ equivalents.
[EXP] Polyfill getLoadManager/getSupportLoaderManager in variants to reduce changes.
[REM] LoaderManager.mWho reflective accesses as that field doesn't exist any more.
[REF] Rewrite EdgeEffect related debug helpers for Android SDK instead of deprecated support lib version.
  • Loading branch information
TWiStErRob committed Nov 2, 2020
1 parent 0c4e5cd commit 9cb59da
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 150 deletions.
8 changes: 1 addition & 7 deletions libs/twister-lib-android/logging/src/main/consumer.pro
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
# net.twisterrob.android.utils.log.LoggingFragment.onActivityCreated(android.os.Bundle)
# net.twisterrob.android.utils.log.LoggingFragment.getLoaderManager()
# net.twisterrob.android.utils.log.LoggingActivity.onCreate(android.os.Bundle)
-keepclassmembernames class android.support.v4.app.LoaderManagerImpl {
java.lang.String mWho;
}
# net.twisterrob.android.utils.log.LoggingFragment.getName()
# net.twisterrob.android.utils.log.FragmentNameStringer
-keepclassmembernames class android.support.v4.app.Fragment {
java.lang.String mWho;
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ public LoggingActivity() {
@Override protected void onCreate(Bundle savedInstanceState) {
log("onCreate", savedInstanceState);
super.onCreate(savedInstanceState);
LoaderManager lm = getSupportLoaderManager();
LOG.trace("{}.loaderManager={}({})", getName(), lm, ReflectionTools.get(lm, "mWho"));
LOG.trace("{}.loaderManager={}", getName(), getSupportLoaderManager());
}

@Override public void onContentChanged() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,82 @@

import android.content.Context;
import android.graphics.Canvas;
import android.support.v4.widget.EdgeEffectWrapper;
import android.os.Build.VERSION_CODES;
import android.support.annotation.*;
import android.widget.EdgeEffect;

import net.twisterrob.android.utils.wrappers.EdgeEffectWrapper;
import net.twisterrob.java.annotations.DebugHelper;

/**
* Register in {@link android.app.Application#onCreate} via
* <code>
* EdgeEffectWrapper.install(LoggingEdgeEffect.class);
* </code>
*
* @see EdgeEffectWrapper#install(Class)
* @see android.support.v7.widget.RecyclerView#setEdgeEffectFactory
*/
@RequiresApi(VERSION_CODES.ICE_CREAM_SANDWICH)
@DebugHelper
public class LoggingEdgeEffect extends EdgeEffectWrapper {

private static final Logger LOG = LoggerFactory.getLogger(LoggingEdgeEffect.class);

public LoggingEdgeEffect(Object effect) {
super(effect);
public LoggingEdgeEffect(@NonNull Context context, @NonNull EdgeEffect effect) {
super(context, effect);
}

@Override public void setSize(int width, int height) {
LOG.trace("{}.setSize({}, {})", getWrapped(), width, height);
super.setSize(width, height);
}

@Override public Object newEdgeEffect(Context context) {
Object result = super.newEdgeEffect(context);
LOG.trace("newEdgeEffect({}): {}", context, result);
@Override public boolean isFinished() {
boolean result = super.isFinished();
LOG.trace("{}.isFinished(): {}", getWrapped(), result);
return result;
}
@Override public void setSize(Object edgeEffect, int width, int height) {
LOG.trace("setSize({}, {}, {})", edgeEffect, width, height);
super.setSize(edgeEffect, width, height);

@Override public void finish() {
LOG.trace("{}.finish()", getWrapped());
super.finish();
}
@Override public boolean isFinished(Object edgeEffect) {
boolean result = super.isFinished(edgeEffect);
LOG.trace("isFinished({}): {}", edgeEffect, result);
return result;

@Override public void onPull(float deltaDistance) {
LOG.trace("{}.onPull({})", getWrapped(), deltaDistance);
super.onPull(deltaDistance);
}
@Override public void finish(Object edgeEffect) {
LOG.trace("finish({})", edgeEffect);
super.finish(edgeEffect);

@Override public void onPull(float deltaDistance, float displacement) {
LOG.trace("{}.onPull({}, {})", getWrapped(), deltaDistance, displacement);
super.onPull(deltaDistance, displacement);
}
@Override public boolean onPull(Object edgeEffect, float deltaDistance) {
boolean result = super.onPull(edgeEffect, deltaDistance);
LOG.trace("onPull({}, {}): {}", edgeEffect, deltaDistance, result);
return result;

@Override public void onRelease() {
LOG.trace("{}.onRelease()", getWrapped());
super.onRelease();
}
@Override public boolean onPull(Object edgeEffect, float deltaDistance, float displacement) {
boolean result = super.onPull(edgeEffect, deltaDistance, displacement);
LOG.trace("onPull({}, {}, {}): {}", edgeEffect, deltaDistance, displacement, result);
return result;

@Override public void onAbsorb(int velocity) {
LOG.trace("{}.onAbsorb({})", getWrapped(), velocity);
super.onAbsorb(velocity);
}
@Override public boolean onRelease(Object edgeEffect) {
boolean result = super.onRelease(edgeEffect);
LOG.trace("onRelease({}): {}", edgeEffect, result);

@Override public int getMaxHeight() {
int result = super.getMaxHeight();
LOG.trace("{}.getMaxHeight(): {}", getWrapped(), result);
return result;
}
@Override public boolean onAbsorb(Object edgeEffect, int velocity) {
boolean result = super.onAbsorb(edgeEffect, velocity);
LOG.trace("onAbsorb({}, {}): {}", edgeEffect, velocity, result);

@Override public void setColor(int color) {
LOG.trace("{}.setColor({})", getWrapped(), color);
super.setColor(color);
}

@Override public int getColor() {
int result = super.getColor();
LOG.trace("{}.getColor(): {}", getWrapped(), result);
return result;
}
@Override public boolean draw(Object edgeEffect, Canvas canvas) {
boolean result = super.draw(edgeEffect, canvas);
LOG.trace("draw({}, {}): {}", edgeEffect, canvas, result);

@Override public boolean draw(Canvas canvas) {
boolean result = super.draw(canvas);
LOG.trace("{}.draw({}): {}", getWrapped(), canvas, result);
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
import net.twisterrob.android.utils.log.LoggingDebugProvider.LoggingHelper;
import net.twisterrob.android.utils.tools.StringerTools;
import net.twisterrob.java.annotations.DebugHelper;
import net.twisterrob.java.exceptions.StackTrace;
import net.twisterrob.java.utils.ReflectionTools;

@DebugHelper
public class LoggingFragment extends Fragment {
Expand Down Expand Up @@ -77,19 +75,7 @@ public LoggingFragment() {
@Override public void onActivityCreated(Bundle savedInstanceState) {
log("onActivityCreated", savedInstanceState);
super.onActivityCreated(savedInstanceState);
LoaderManager lm = super.getLoaderManager();
LOG.trace("{}.loaderManager={}({})", getName(), lm, ReflectionTools.get(lm, "mWho"));
}

@Override public LoaderManager getLoaderManager() {
LoaderManager lm = super.getLoaderManager();
String who = ReflectionTools.get(lm, "mWho");
if (who == null || who.contains("null")) {
// for example executePendingTransactions() in onCreate()
LOG.warn("{}.getLoaderManager(): invalid loaderManager {}({}), parent not initialized yet",
getName(), lm, who, new StackTrace());
}
return lm;
LOG.trace("{}.loaderManager={}", getName(), getLoaderManager());
}

@Override public void onViewStateRestored(Bundle savedInstanceState) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package net.twisterrob.android.utils.wrappers;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Build.VERSION_CODES;
import android.support.annotation.*;
import android.widget.EdgeEffect;

import net.twisterrob.java.annotations.DebugHelper;

@RequiresApi(VERSION_CODES.ICE_CREAM_SANDWICH)
@DebugHelper
public class EdgeEffectWrapper extends EdgeEffect {

private final @NonNull EdgeEffect effectImpl;

/**
* @param effectImpl {@link EdgeEffectCompat.EdgeEffectImpl} object
* (type erased to {@link Object} because it's not public)
*/
public EdgeEffectWrapper(@NonNull Context context, @NonNull EdgeEffect effectImpl) {
super(context);
this.effectImpl = effectImpl;
}

public @NonNull EdgeEffect getWrapped() {
return effectImpl;
}

@Override public void setSize(int width, int height) {
effectImpl.setSize(width, height);
}

@Override public boolean isFinished() {
return effectImpl.isFinished();
}

@Override public void finish() {
effectImpl.finish();
}

@Override public void onPull(float deltaDistance) {
effectImpl.onPull(deltaDistance);
}

@Override public void onRelease() {
effectImpl.onRelease();
}

@Override public void onAbsorb(int velocity) {
effectImpl.onAbsorb(velocity);
}

@Override public boolean draw(Canvas canvas) {
return effectImpl.draw(canvas);
}

@TargetApi(VERSION_CODES.LOLLIPOP)
@Override public int getMaxHeight() {
return effectImpl.getMaxHeight();
}

@TargetApi(VERSION_CODES.LOLLIPOP)
@Override public void setColor(int color) {
effectImpl.setColor(color);
}

@TargetApi(VERSION_CODES.LOLLIPOP)
@Override public int getColor() {
return effectImpl.getColor();
}

@TargetApi(VERSION_CODES.LOLLIPOP)
@Override public void onPull(float deltaDistance, float displacement) {
effectImpl.onPull(deltaDistance, displacement);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import android.support.design.widget.TextInputLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.*;
import android.support.v4.widget.SearchViewCompat;
import android.util.Log;
import android.view.*;
import android.view.ViewGroup.*;
Expand Down Expand Up @@ -595,22 +594,26 @@ public static Intent getApplicationInfoScreen(Context context, String packageNam
if (view == null) {
throw new NullPointerException("Cannot find actionView! Is it declared in XML and kept in proguard?");
}
SearchableInfo info = searchManager.getSearchableInfo(activity.getComponentName());
if (info == null) {
throw new NullPointerException("No searchable info for " + activity.getComponentName()
+ "\nDid you define <meta-data android:name=\"android.app.default_searchable\""
+ /* */ " android:value=\".${name of search results activity}\" />"
+ "\neither on application level or inside the activity in AndroidManifest.xml?"
+ "\nAlso make sure that in the merged manifest the class name resolves correctly (package)."
+ "\nDouble check that the searchable.xml doesn't contain literal strings for label and hint!"
);
}
if (view instanceof android.support.v7.widget.SearchView) {
android.support.v7.widget.SearchView searchView = (android.support.v7.widget.SearchView)view;
SearchableInfo info = searchManager.getSearchableInfo(activity.getComponentName());
if (info == null) {
throw new NullPointerException("No searchable info for " + activity.getComponentName()
+ "\nDid you define <meta-data android:name=\"android.app.default_searchable\""
+ /* */ " android:value=\".${name of search results activity}\" />"
+ "\neither on application level or inside the activity in AndroidManifest.xml?"
+ "\nAlso make sure that in the merged manifest the class name resolves correctly (package)."
+ "\nDouble check that the searchable.xml doesn't contain literal strings for label and hint!"
);
}
searchView.setSearchableInfo(info);
return searchView;
} else if (VERSION_CODES.HONEYCOMB <= VERSION.SDK_INT) {
android.widget.SearchView searchView = (android.widget.SearchView)view;
searchView.setSearchableInfo(info);
return searchView;
} else {
SearchViewCompat.setSearchableInfo(view, activity.getComponentName());
LOG.warn("Unknown SearchView: {}, prepareSearch unsuccessful.", view, new StackTrace());
return view;
}
}
Expand Down

0 comments on commit 9cb59da

Please sign in to comment.