nt-fwk: create stub for NtOnlineConfig
* Required by nothing camera app * Part of Nt-framework on stock
This commit is contained in:
16
nt-fwk/src/com/nothing/ext/INtOnlineConfig.java
Normal file
16
nt-fwk/src/com/nothing/ext/INtOnlineConfig.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package com.nothing.ext;
|
||||||
|
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
|
||||||
|
public interface INtOnlineConfig {
|
||||||
|
public static final INtOnlineConfig DEFAULT = new INtOnlineConfig() {};
|
||||||
|
|
||||||
|
default JSONArray grabConfig(ContentResolver resolver, String projectName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
default void registerContentObserver(ContentResolver resolver, String projectName, boolean notifyForDescendants, ContentObserver observer) {
|
||||||
|
}
|
||||||
|
}
|
||||||
35
nt-fwk/src/com/nothing/onlineconfig/ConfigGrabber.java
Normal file
35
nt-fwk/src/com/nothing/onlineconfig/ConfigGrabber.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package com.nothing.onlineconfig;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A stub for the com.nothing.onlineconfig.ConfigGrabber class.
|
||||||
|
* The original application uses reflection to instantiate this class,
|
||||||
|
* and the constructor was likely causing a crash. This stub provides a
|
||||||
|
* safe, non-functional implementation that will be found by the reflection
|
||||||
|
* code and will not crash.
|
||||||
|
*/
|
||||||
|
public class ConfigGrabber {
|
||||||
|
private static final String TAG = "ConfigGrabberStub";
|
||||||
|
|
||||||
|
// The original constructor likely took a Context and a String.
|
||||||
|
// We must match this signature for the reflection call to succeed.
|
||||||
|
public ConfigGrabber(Context context, String projectName) {
|
||||||
|
Log.d(TAG, "ConfigGrabber stub created for project: " + projectName);
|
||||||
|
// The original constructor would have been the source of the crash.
|
||||||
|
// We've replaced it with this safe, no-op implementation.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stubs the grabConfig method to return an empty JSONArray.
|
||||||
|
* This prevents any dependent code from processing a null or invalid config.
|
||||||
|
*
|
||||||
|
* @return An empty JSONArray.
|
||||||
|
*/
|
||||||
|
public JSONArray grabConfig() {
|
||||||
|
Log.d(TAG, "grabConfig() called on stub. Returning an empty JSONArray.");
|
||||||
|
return new JSONArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
43
nt-fwk/src/com/nothing/onlineconfig/ConfigObserver.java
Normal file
43
nt-fwk/src/com/nothing/onlineconfig/ConfigObserver.java
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package com.nothing.onlineconfig;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.util.Log;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
|
||||||
|
public class ConfigObserver extends ContentObserver {
|
||||||
|
private static final String TAG = "ConfigObserverStub";
|
||||||
|
|
||||||
|
public interface ConfigUpdater {
|
||||||
|
void updateConfig(JSONArray jSONArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// A dependency on ConfigGrabber, which we now have a stub for.
|
||||||
|
private final ConfigGrabber mConfigGrabber;
|
||||||
|
private final ConfigUpdater mConfigUpdater;
|
||||||
|
|
||||||
|
public ConfigObserver(Context context, Handler handler, ConfigUpdater configUpdater, String projectName) {
|
||||||
|
super(handler);
|
||||||
|
Log.d(TAG, "ConfigObserver stub created.");
|
||||||
|
this.mConfigGrabber = new ConfigGrabber(context, projectName);
|
||||||
|
this.mConfigUpdater = configUpdater;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
Log.d(TAG, "register() called on stub. No-op.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
Log.d(TAG, "unregister() called on stub. No-op.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChange(boolean selfChange) {
|
||||||
|
super.onChange(selfChange);
|
||||||
|
Log.d(TAG, "onChange() called on stub. Notifying updater with empty config.");
|
||||||
|
if (mConfigUpdater != null) {
|
||||||
|
mConfigUpdater.updateConfig(mConfigGrabber.grabConfig());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
nt-fwk/src/com/nothing/onlineconfig/NtOnlineConfigImpl.java
Normal file
26
nt-fwk/src/com/nothing/onlineconfig/NtOnlineConfigImpl.java
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
package com.nothing.onlineconfig;
|
||||||
|
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import android.util.Log;
|
||||||
|
import com.nothing.ext.INtOnlineConfig;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
|
||||||
|
public class NtOnlineConfigImpl implements INtOnlineConfig {
|
||||||
|
private static final String TAG = "NtOnlineConfigImplStub";
|
||||||
|
|
||||||
|
public NtOnlineConfigImpl() {
|
||||||
|
Log.d(TAG, "NtOnlineConfigImpl stub created.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONArray grabConfig(ContentResolver resolver, String projectName) {
|
||||||
|
Log.d(TAG, "grabConfig() called on stub. Returning an empty array.");
|
||||||
|
return new JSONArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerContentObserver(ContentResolver resolver, String projectName, boolean notifyForDescendants, ContentObserver observer) {
|
||||||
|
Log.d(TAG, "registerContentObserver() called on stub. No-op.");
|
||||||
|
}
|
||||||
|
}
|
||||||
56
nt-fwk/src/com/nothing/sdk/onlineconfig/ConfigObserver.java
Normal file
56
nt-fwk/src/com/nothing/sdk/onlineconfig/ConfigObserver.java
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
package com.nothing.sdk.onlineconfig;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.ContentObserver;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.util.Log;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import com.nothing.onlineconfig.NtOnlineConfigImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A stub for the ConfigObserver class, located in the com.nothing.sdk.onlineconfig package.
|
||||||
|
* This class is the direct cause of the crash, as indicated by the logcat. This stub
|
||||||
|
* provides a non-functional, safe implementation to prevent the app from crashing.
|
||||||
|
*/
|
||||||
|
public class ConfigObserver extends ContentObserver {
|
||||||
|
private static final String TAG = "ConfigObserverStub";
|
||||||
|
|
||||||
|
public interface ConfigUpdater {
|
||||||
|
void updateConfig(JSONArray jSONArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// A simple stub for the ConfigGrabber dependency
|
||||||
|
private static class ConfigGrabberStub {
|
||||||
|
public ConfigGrabberStub(Context context, String projectName) {}
|
||||||
|
public JSONArray grabConfig() { return new JSONArray(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private final ConfigGrabberStub mConfigGrabber;
|
||||||
|
private final ConfigUpdater mConfigUpdater;
|
||||||
|
|
||||||
|
public ConfigObserver(Context context, Handler handler, ConfigUpdater configUpdater, String projectName) {
|
||||||
|
super(handler);
|
||||||
|
Log.d(TAG, "ConfigObserver stub created. This should prevent the crash.");
|
||||||
|
// We create a local stub for ConfigGrabber to avoid dependencies on other stubs.
|
||||||
|
this.mConfigGrabber = new ConfigGrabberStub(context, projectName);
|
||||||
|
this.mConfigUpdater = configUpdater;
|
||||||
|
// The original code here is likely the source of the crash. We are bypassing it.
|
||||||
|
}
|
||||||
|
|
||||||
|
public void register() {
|
||||||
|
Log.d(TAG, "register() called on stub. No-op.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregister() {
|
||||||
|
Log.d(TAG, "unregister() called on stub. No-op.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChange(boolean selfChange) {
|
||||||
|
super.onChange(selfChange);
|
||||||
|
Log.d(TAG, "onChange() called on stub. Notifying updater with empty config.");
|
||||||
|
if (mConfigUpdater != null) {
|
||||||
|
mConfigUpdater.updateConfig(mConfigGrabber.grabConfig());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user