AndroidBugFix
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • Android
  • Android Studio
  • Java
  • Kotlin
  • Flutter
  • React Native

Monday, February 7, 2022

How to programmatically include the mouse cursor in android tv

 February 07, 2022     android, android-tv, android-webview     No comments   

Issue

I use Webview, which loads random sites. For good navigation I need to turn on the mouse cursor, which will be controlled by D-pad, but I did not find information on how to do it, maybe someone can have developed such navigation, I will be grateful for any help.


Solution

To Enable cursor pointer in android tv webview by creating custom pointer layout

public class CursorLayout extends FrameLayout {
public static final int CURSOR_DISAPPEAR_TIMEOUT = 5000;
public static int CURSOR_RADIUS = 0;
public static float CURSOR_STROKE_WIDTH = 0.0f;
public static float MAX_CURSOR_SPEED = 0.0f;
public static int SCROLL_START_PADDING = 100;
public static final int UNCHANGED = -100;
public int EFFECT_DIAMETER;
public int EFFECT_RADIUS;
private Callback callback;
/* access modifiers changed from: private */
public Point cursorDirection = new Point(0, 0);
/* access modifiers changed from: private */
public Runnable cursorHideRunnable = new Runnable() {
    public void run() {
        CursorLayout.this.invalidate();
    }
};
/* access modifiers changed from: private */
public PointF cursorPosition = new PointF(0.0f, 0.0f);
/* access modifiers changed from: private */
public PointF cursorSpeed = new PointF(0.0f, 0.0f);
private Runnable cursorUpdateRunnable = new Runnable() {
    public void run() {
        if (CursorLayout.this.getHandler() != null) {
            CursorLayout.this.getHandler().removeCallbacks(CursorLayout.this.cursorHideRunnable);
        }
        long currentTimeMillis = System.currentTimeMillis();
        long access$100 = currentTimeMillis - CursorLayout.this.lastCursorUpdate;
        CursorLayout.this.lastCursorUpdate = currentTimeMillis;
        float f = ((float) access$100) * 0.05f;
        PointF access$200 = CursorLayout.this.cursorSpeed;
        CursorLayout cursorLayout = CursorLayout.this;
        float f2 = cursorLayout.cursorSpeed.x;
        CursorLayout cursorLayout2 = CursorLayout.this;
        float access$400 = cursorLayout.bound(f2 + (cursorLayout2.bound((float) cursorLayout2.cursorDirection.x, 1.0f) * f), CursorLayout.MAX_CURSOR_SPEED);
        CursorLayout cursorLayout3 = CursorLayout.this;
        float f3 = cursorLayout3.cursorSpeed.y;
        CursorLayout cursorLayout4 = CursorLayout.this;
        access$200.set(access$400, cursorLayout3.bound(f3 + (cursorLayout4.bound((float) cursorLayout4.cursorDirection.y, 1.0f) * f), CursorLayout.MAX_CURSOR_SPEED));
        if (Math.abs(CursorLayout.this.cursorSpeed.x) < 0.1f) {
            CursorLayout.this.cursorSpeed.x = 0.0f;
        }
        if (Math.abs(CursorLayout.this.cursorSpeed.y) < 0.1f) {
            CursorLayout.this.cursorSpeed.y = 0.0f;
        }
        if (CursorLayout.this.cursorDirection.x == 0 && CursorLayout.this.cursorDirection.y == 0 && CursorLayout.this.cursorSpeed.x == 0.0f && CursorLayout.this.cursorSpeed.y == 0.0f) {
            if (CursorLayout.this.getHandler() != null) {
                CursorLayout.this.getHandler().postDelayed(CursorLayout.this.cursorHideRunnable, 5000);
            }
            return;
        }
        CursorLayout.this.tmpPointF.set(CursorLayout.this.cursorPosition);
        CursorLayout.this.cursorPosition.offset(CursorLayout.this.cursorSpeed.x, CursorLayout.this.cursorSpeed.y);
        Log.d("cursor1234_xxxx", String.valueOf(CursorLayout.this.cursorPosition.x));
        Log.d("cursor1234_yyyy", String.valueOf(CursorLayout.this.cursorPosition.y));
        if (CursorLayout.this.cursorPosition.x < 0.0f) {
            CursorLayout.this.cursorPosition.x = 0.0f;
        } else if (CursorLayout.this.cursorPosition.x > ((float) (CursorLayout.this.getWidth() - 1))) {
            CursorLayout.this.cursorPosition.x = (float) (CursorLayout.this.getWidth() - 1);
        }
        if (CursorLayout.this.cursorPosition.y < 0.0f) {
            CursorLayout.this.cursorPosition.y = 0.0f;
        } else if (CursorLayout.this.cursorPosition.y > ((float) (CursorLayout.this.getHeight() - 1))) {
            CursorLayout.this.cursorPosition.y = (float) (CursorLayout.this.getHeight() - 1);
        }
        if (!CursorLayout.this.tmpPointF.equals(CursorLayout.this.cursorPosition) && CursorLayout.this.dpadCenterPressed) {
            CursorLayout cursorLayout5 = CursorLayout.this;
            cursorLayout5.dispatchMotionEvent(cursorLayout5.cursorPosition.x, CursorLayout.this.cursorPosition.y, 2);
        }
        View childAt = CursorLayout.this.getChildAt(0);
        if (childAt != null) {
            if (CursorLayout.this.cursorPosition.y > ((float) (CursorLayout.this.getHeight() - CursorLayout.SCROLL_START_PADDING))) {
                if (CursorLayout.this.cursorSpeed.y > 0.0f && childAt.canScrollVertically((int) CursorLayout.this.cursorSpeed.y)) {
                    childAt.scrollTo(childAt.getScrollX(), childAt.getScrollY() + ((int) CursorLayout.this.cursorSpeed.y));
                }
            } else if (CursorLayout.this.cursorPosition.y < ((float) CursorLayout.SCROLL_START_PADDING) && CursorLayout.this.cursorSpeed.y < 0.0f && childAt.canScrollVertically((int) CursorLayout.this.cursorSpeed.y)) {
                childAt.scrollTo(childAt.getScrollX(), childAt.getScrollY() + ((int) CursorLayout.this.cursorSpeed.y));
            }
            if (CursorLayout.this.cursorPosition.x > ((float) (CursorLayout.this.getWidth() - CursorLayout.SCROLL_START_PADDING))) {
                if (CursorLayout.this.cursorSpeed.x > 0.0f && childAt.canScrollHorizontally((int) CursorLayout.this.cursorSpeed.x)) {
                    childAt.scrollTo(childAt.getScrollX() + ((int) CursorLayout.this.cursorSpeed.x), childAt.getScrollY());
                }
            } else if (CursorLayout.this.cursorPosition.x < ((float) CursorLayout.SCROLL_START_PADDING) && CursorLayout.this.cursorSpeed.x < 0.0f && childAt.canScrollHorizontally((int) CursorLayout.this.cursorSpeed.x)) {
                childAt.scrollTo(childAt.getScrollX() + ((int) CursorLayout.this.cursorSpeed.x), childAt.getScrollY());
            }
        }
        CursorLayout.this.invalidate();
        if (CursorLayout.this.getHandler() != null) {
            CursorLayout.this.getHandler().post(this);
        }
    }
};
/* access modifiers changed from: private */
public boolean dpadCenterPressed = false;
/* access modifiers changed from: private */
public long lastCursorUpdate = System.currentTimeMillis();
private Paint paint = new Paint();
PointF tmpPointF = new PointF();

public interface Callback {
    void onUserInteraction();
}

/* access modifiers changed from: private */
public float bound(float f, float f2) {
    if (f > f2) {
        return f2;
    }
    float f3 = -f2;
    return f < f3 ? f3 : f;
}

public CursorLayout(Context context) {
    super(context);
    init();
}

public CursorLayout(Context context, AttributeSet attributeSet) {
    super(context, attributeSet);
    init();
}

private void init() {
    if (!isInEditMode()) {
        this.paint.setAntiAlias(true);
        setWillNotDraw(false);
        Display defaultDisplay = ((WindowManager) getContext().getSystemService(getContext().WINDOW_SERVICE)).getDefaultDisplay();
        Point point = new Point();
        defaultDisplay.getSize(point);
        this.EFFECT_RADIUS = point.x / 20;
        this.EFFECT_DIAMETER = this.EFFECT_RADIUS * 2;
        CURSOR_STROKE_WIDTH = (float) (point.x / 400);
        CURSOR_RADIUS = point.x / 110;
        MAX_CURSOR_SPEED = (float) (point.x / 25);
        SCROLL_START_PADDING = point.x / 15;
    }
}

public void setCallback(Callback callback2) {
    this.callback = callback2;
}

public boolean onInterceptTouchEvent(MotionEvent motionEvent) {
    Callback callback2 = this.callback;
    if (callback2 != null) {
        callback2.onUserInteraction();
    }
    return super.onInterceptTouchEvent(motionEvent);
}

/* access modifiers changed from: protected */
public void onSizeChanged(int i, int i2, int i3, int i4) {
    super.onSizeChanged(i, i2, i3, i4);
    UtilMethods.LogMethod("cursorView123_", "onSizeChanged");
    if (!isInEditMode()) {
        this.cursorPosition.set(((float) i) / 2.0f, ((float) i2) / 2.0f);
        if (getHandler() != null) {
            getHandler().postDelayed(this.cursorHideRunnable, 5000);
        }
    }
}

public boolean dispatchKeyEvent(KeyEvent keyEvent) {
    UtilMethods.LogMethod("cursorView123_", "dispatchKeyEvent");
    Callback callback2 = this.callback;
    if (callback2 != null) {
        callback2.onUserInteraction();
    }
    int keyCode = keyEvent.getKeyCode();
    if (!(keyCode == 66 || keyCode == 160)) {
        switch (keyCode) {
            case 19:
                if (keyEvent.getAction() == 0) {
                    if (this.cursorPosition.y <= 0.0f) {
                        return super.dispatchKeyEvent(keyEvent);
                    }
                    handleDirectionKeyEvent(keyEvent, -100, -1, true);
                } else if (keyEvent.getAction() == 1) {
                    handleDirectionKeyEvent(keyEvent, -100, 0, false);
                }
                return true;
            case 20:
                if (keyEvent.getAction() == 0) {
                    if (this.cursorPosition.y >= ((float) getHeight())) {
                        return super.dispatchKeyEvent(keyEvent);
                    }
                    handleDirectionKeyEvent(keyEvent, -100, 1, true);
                } else if (keyEvent.getAction() == 1) {
                    handleDirectionKeyEvent(keyEvent, -100, 0, false);
                }
                return true;
            case 21:
                if (keyEvent.getAction() == 0) {
                    if (this.cursorPosition.x <= 0.0f) {
                        return super.dispatchKeyEvent(keyEvent);
                    }
                    handleDirectionKeyEvent(keyEvent, -1, -100, true);
                } else if (keyEvent.getAction() == 1) {
                    handleDirectionKeyEvent(keyEvent, 0, -100, false);
                }
                return true;
            case 22:
                if (keyEvent.getAction() == 0) {
                    if (this.cursorPosition.x >= ((float) getWidth())) {
                        return super.dispatchKeyEvent(keyEvent);
                    }
                    handleDirectionKeyEvent(keyEvent, 1, -100, true);
                } else if (keyEvent.getAction() == 1) {
                    handleDirectionKeyEvent(keyEvent, 0, -100, false);
                }
                return true;
            case 23:
                break;
            default:
                switch (keyCode) {
                    case 268:
                        if (keyEvent.getAction() == 0) {
                            handleDirectionKeyEvent(keyEvent, -1, -1, true);
                        } else if (keyEvent.getAction() == 1) {
                            handleDirectionKeyEvent(keyEvent, 0, 0, false);
                        }
                        return true;
                    case 269:
                        if (keyEvent.getAction() == 0) {
                            handleDirectionKeyEvent(keyEvent, -1, 1, true);
                        } else if (keyEvent.getAction() == 1) {
                            handleDirectionKeyEvent(keyEvent, 0, 0, false);
                        }
                        return true;
                    case 270:
                        if (keyEvent.getAction() == 0) {
                            handleDirectionKeyEvent(keyEvent, 1, -1, true);
                        } else if (keyEvent.getAction() == 1) {
                            handleDirectionKeyEvent(keyEvent, 0, 0, false);
                        }
                        return true;
                    case 271:
                        if (keyEvent.getAction() == 0) {
                            handleDirectionKeyEvent(keyEvent, 1, 1, true);
                        } else if (keyEvent.getAction() == 1) {
                            handleDirectionKeyEvent(keyEvent, 0, 0, false);
                        }
                        return true;
                }
        }
    }
    if (!isCursorDissappear()) {
        if (keyEvent.getAction() == 0 && !getKeyDispatcherState().isTracking(keyEvent)) {
            getKeyDispatcherState().startTracking(keyEvent, this);
            this.dpadCenterPressed = true;
            dispatchMotionEvent(this.cursorPosition.x, this.cursorPosition.y, 0);
        } else if (keyEvent.getAction() == 1) {
            getKeyDispatcherState().handleUpEvent(keyEvent);
            dispatchMotionEvent(this.cursorPosition.x, this.cursorPosition.y, 1);
            this.dpadCenterPressed = false;
        }
        return true;
    }
    return super.dispatchKeyEvent(keyEvent);
}

/* access modifiers changed from: private */
public void dispatchMotionEvent(float f, float f2, int i) {
    UtilMethods.LogMethod("cursorView123_", "dispatchMotionEvent");
    long uptimeMillis = SystemClock.uptimeMillis();
    long uptimeMillis2 = SystemClock.uptimeMillis();
    PointerProperties pointerProperties = new PointerProperties();
    pointerProperties.id = 0;
    pointerProperties.toolType = 1;
    PointerProperties[] pointerPropertiesArr = {pointerProperties};
    PointerCoords pointerCoords = new PointerCoords();
    pointerCoords.x = f;
    pointerCoords.y = f2;
    pointerCoords.pressure = 1.0f;
    pointerCoords.size = 1.0f;
    dispatchTouchEvent(MotionEvent.obtain(uptimeMillis, uptimeMillis2, i, 1, pointerPropertiesArr, new PointerCoords[]{pointerCoords}, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0));
}

private void handleDirectionKeyEvent(KeyEvent keyEvent, int i, int i2, boolean z) {
    this.lastCursorUpdate = System.currentTimeMillis();
    if (!z) {
        getKeyDispatcherState().handleUpEvent(keyEvent);
        this.cursorSpeed.set(0.0f, 0.0f);
    } else if (!getKeyDispatcherState().isTracking(keyEvent)) {
        Handler handler = getHandler();
        handler.removeCallbacks(this.cursorUpdateRunnable);
        handler.post(this.cursorUpdateRunnable);
        getKeyDispatcherState().startTracking(keyEvent, this);
    } else {
        return;
    }
    Point point = this.cursorDirection;
    if (i == -100) {
        i = point.x;
    }
    if (i2 == -100) {
        i2 = this.cursorDirection.y;
    }
    point.set(i, i2);
}

/* access modifiers changed from: protected */
public void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);
    UtilMethods.LogMethod("cursorView123_", "dispatchDraw");
    if (!isInEditMode() && !isCursorDissappear()) {
        float f = this.cursorPosition.x;
        float f2 = this.cursorPosition.y;
        this.paint.setColor(Color.argb(128, 255, 255, 255));
        this.paint.setStyle(Style.FILL);
        canvas.drawCircle(f, f2, (float) CURSOR_RADIUS, this.paint);
        this.paint.setColor(-7829368);
        this.paint.setStrokeWidth(CURSOR_STROKE_WIDTH);
        this.paint.setStyle(Style.STROKE);
        canvas.drawCircle(f, f2, (float) CURSOR_RADIUS, this.paint);
    }
}

private boolean isCursorDissappear() {
    return System.currentTimeMillis() - this.lastCursorUpdate > 5000;
}

/* access modifiers changed from: protected */
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
}}

then put the webview inside custom cursor layout in XML

<com.example.webviewtvapp.CursorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/cursorLayout">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</com.example.webviewtvapp.CursorLayout>


Answered By - Yasham Ihsan
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
This Answer collected from stackoverflow and tested by AndroidBugFix community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0
Newer Post Older Post Home

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Popular Posts

  • Android studio 3.2.1 ArtifactResolveException: Could not resolve all artifacts for configuration ':classpath'
    Issue After I update Android Studio to 3.2.1 and gradle version in my project I am getting...
  • Error: Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8. -& Failed to apply plugin 'com.android.internal.application'
    Issue I have tried all the possible solutions for this error. Require guidance here: I am...
  • How to import .AAR module on Android Studio 4.2
    Issue Previously I used File > New > New Module > Import .JAR/.AAR Package but t...
  • How to solved 'dart:ui' error when going to run flutter app?
    Issue Below error occurs when I try to run my first flutter app. file:///Volumes/Data...
  • Kotlin: Type mismatch: inferred type is String but Context was expected -(notification channel in kotlin-class specific error)
    Issue I am making an app which requires the use of work manager to make a notification, I ...
  • Appcenter iOS install error "this app cannot be installed because its integrity could not be verified"
    Issue I see that this question has been asked many times but I see no solution that works ...
  • Duplicate class in build.gradle file
    Issue I have included following dependencies in build.gradle file. I get the following err...
  • How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio
    Issue I have one project on Gitlab and I worked with it for the last few days! Now i wa...
  • Mockito - wanted but not invoked - interface.method()
    Issue I am running a few tests right now in which I mock one of my interfaces like this: ...
  • AmbiguousViewMatcherException multiple RecyclerViews
    Issue I have a Fragment that contains RecyclerView . But since I have a lot of elements i...

Labels

.a .net .net-6.0 .net-assembly .net-core .net-standard .net-standard-2.1 .so 32-bit 32bit-64bit 360-virtual-reality 64-bit a-star a2dp aapt aapt2 aar abcustomuinavcontroller abi abstract abstract-class abstract-factory accelerometer access-denied access-modifiers access-token accessibility accessibilityservice accordion achartengine action actionbarsherlock actionlistener active-directory activity-finish activity-indicator activity-lifecycle activity-manager activity-recognition activity-result-api activity-stack activitynotfoundexception activityresultcontracts activityunittestcase adapter adb adblock adbwireless addr2line address-bar address-sanitizer addtextchangedlistener adjustpan admob ads adt adview aes aes-gcm aframe aggregation-framework agora.io aide-ide airtable ajax akka akka-http akka-stream alarmmanager alert algorithm alignment allure alpha alphabetical alpine altbeacon amazon-ami amazon-cognito amazon-dynamodb amazon-fire-tv amazon-linux-2 amazon-rekognition amazon-s3 amazon-sqs amazon-web-services amd amr analytics analyzer andengine andengine-gles-2 android android-1.6-donut android-10.0 android-11 android-12 android-13 android-2.1-eclair android-2.2-froyo android-2.3-gingerbread android-3.0-honeycomb android-4.0-ice-cream-sandwich android-4.2-jelly-bean android-4.3-jelly-bean android-4.4-kitkat android-5.0-lollipop android-5.1.1-lollipop android-6.0-marshmallow android-7.0-nougat android-7.1-nougat android-8.0-oreo android-8.1-oreo android-9.0-pie android-accessibility android-actionbar android-actionbar-compat android-actionbaractivity android-activity android-adapter android-adapterview android-afilechooser android-alertdialog android-animation android-annotations android-api-30 android-api-31 android-api-levels android-app-bundle android-app-indexing android-app-links android-app-signing android-appbarlayout android-appcompat android-application-class android-architecture-components android-architecture-lifecycle android-architecture-navigation android-arrayadapter android-assertj android-asset-studio android-assetmanager android-assets android-asynctask android-attributes android-audiomanager android-audiorecord android-auto android-autofill-manager android-background android-billing android-binder android-binding-adapter android-biometric android-bitmap android-bluetooth android-bottom-nav-view android-bottomappbar android-bottomnav android-bottomnavigationview android-bottomsheetdialog android-broadcast android-broadcastreceiver android-browser android-build android-build-flavors android-build-type android-bundle android-button android-calendar android-camera android-camera-intent android-camera2 android-camerax android-canvas android-cardview android-checkbox android-chips android-chrome android-collapsingtoolbarlayout android-color android-compatibility android-components android-compose-button android-compose-textfield android-configchanges android-connectionservice android-connectivitymanager android-constraintlayout android-contacts android-contentprovider android-contentresolver android-context android-cookiemanager android-coordinatorlayout android-cursor android-custom-view android-customtabs android-dark-theme android-darkmode android-database android-databinding android-date android-datepicker android-debug android-debugging android-deep-link android-design-library android-designer android-developer-api android-device-manager android-dialer android-dialog android-dialogfragment android-diffutils android-download-manager android-downloadable-fonts android-drawable android-drawer android-edittext android-emulator android-enterprise android-espresso android-espresso-recorder android-espresso-web android-event android-external-storage android-ffmpeg android-file android-fileprovider android-filterable android-flavordimension android-flavors android-fonts android-fragmentactivity android-fragments android-fragmentscenario android-framelayout android-framework android-fullscreen android-fusedlocation android-gallery android-gesture android-glide android-gps android-gradle-3.0 android-gradle-3.1.0 android-gradle-7.0 android-gradle-plugin android-graphics android-gravity android-gridlayout android-gridview android-handler android-handlerthread android-hardware android-holo-everywhere android-icons android-ide android-identifiers android-image android-imagebutton android-imageview android-inflate android-input-method android-install-apk android-instant-apps android-instant-run android-instrumentation android-intent android-intent-chooser android-intentservice android-internal-storage android-internet android-jetifier android-jetpack android-jetpack-compose android-jetpack-compose-button android-jetpack-compose-gesture android-jetpack-compose-list android-jetpack-compose-material3 android-jetpack-compose-testing android-jetpack-compose-text android-jetpack-datastore android-jetpack-navigation android-jodatime android-json android-junit android-keypad android-keystore android-launcher android-layout android-layout-editor android-layout-weight android-layoutparams android-library android-licenses android-lifecycle android-linearlayout android-lint android-listadapter android-listview android-livedata android-location android-logcat android-lvl android-management-api android-manifest android-maps android-maps-utils android-maps-v2 android-mapview android-maven-plugin android-mediacodec android-mediaplayer android-mediaprojection android-mediarecorder android-memory android-menu android-min-sdk android-mnc android-module android-monkey android-motionlayout android-multidex android-music-player android-mvp android-mvvm android-native-library android-navigation android-navigation-bar android-navigation-editor android-navigation-graph android-navigationview android-ndk android-ndk-r7 android-nestedscrollview android-network-security-config android-networking android-night-mode android-notification-bar android-notifications android-optionsmenu android-orchestrator android-overlay android-package-managers android-pagetransformer android-paging android-paging-3 android-paging-library android-parser android-pdf-api android-pendingintent android-percent-library android-permissions android-phone-call android-picture-in-picture android-popupwindow android-preferences android-productflavors android-progressbar android-proguard android-r8 android-radiobutton android-recyclerview android-relativelayout android-renderscript android-resolution android-resource-file android-resources android-room android-safe-args android-savedstate android-screen-support android-scripting android-scroll android-scrollbar android-scrollview android-sdk-1.6 android-sdk-2.3 android-sdk-manager android-sdk-tools android-search android-security android-securityexception android-seekbar android-selector android-sensors android-service android-settings android-shape android-shapedrawable android-sharing android-shell android-shortcut android-shortcutmanager android-signing android-sliding android-snackbar android-softkeyboard android-soong android-source android-spinner android-splashscreen android-sqlite android-statusbar android-storage android-strictmode android-studio android-studio-2.0 android-studio-2.1 android-studio-2.2 android-studio-2.3 android-studio-3.0 android-studio-3.1 android-studio-3.1.4 android-studio-3.2 android-studio-3.5 android-studio-3.6 android-studio-4.0 android-studio-4.1 android-studio-4.2 android-studio-arctic-fox android-studio-bumblebee android-studio-debugger android-styles android-support-design android-support-library android-switch android-syncadapter android-tabhost android-tablayout android-tablelayout android-tabs android-task android-test-orchestrator android-testify android-testing android-text-color android-textattributes android-textinputedittext android-textinputlayout android-textureview android-textwatcher android-theme android-things android-thread android-threading android-timer android-tiramisu android-titlebar android-toast android-togglebutton android-toolbar android-tools-namespace android-touch-event android-transitions android-tv android-twitter android-ui android-uiautomator android-unit-testing android-update-app android-vectordrawable android-version android-vibration android-video-player android-videoview android-view android-viewbinding android-viewgroup android-viewholder android-viewmodel android-viewpager android-viewpager2 android-viewtreeobserver android-vitals android-volley android-wake-lock android-wear-2.0 android-webservice android-websettings android-webview android-webview-javascript android-widget android-wifi android-window android-windowmanager android-workmanager android-wrap-content android-x86 android-xml android-youtube-api android.mk androidappsonchromeos androiddesignsupport androidhttpclient androidimageslider androidx androidx-test angular angular-auth-oidc-client angular-cdk-virtual-scroll angular-cli angular-components angular-directive angular-e2e angular-httpclient angular-material angular-module angular-pipe angular-reactive-forms angular-router angular-routerlink angular-routing angular-schematics angular-test angular-ui-router angular-universal angular11 angular12 angular13 angular2-nativescript angular2-ngcontent angular5 angular6 angular7 angular8 angular9 angularfire angularfire2 angularjs angularjs-routing animated animated-gif animatedcontainer animation animationcontroller anko annotation-processing annotations anomaly-detection anpr ant antialiasing antlr any anychart anyline anysoftkeyboard aop aot apache apache-aries apache-beam apache-camel apache-commons apache-commons-csv apache-commons-fileupload apache-commons-logging apache-flink apache-httpasyncclient apache-httpclient-4.x apache-httpcomponents apache-johnzon apache-kafka apache-kafka-streams apache-mina apache-poi apache-spark apache-spark-sql api api-key apk apk-expansion-files apktool app-launcher app-shell app-store app-store-connect app-update app.xaml appbar appboy appcelerator appcompatactivity appdata append appery.io appfuse appicon appium appium-android appium-desktop apple-m1 apple-push-notifications apple-sign-in apple-silicon apple-watch application-lifecycle application-name application-restart application-state application.properties applicationcontext appwrite apt-get arabic arcgis arcgis-runtime-net architecture archlinux archunit arcore arduino arduino-uno area argumentcaptor arguments arima arkit arm arm64 armv7 arraylist arrays arrow-kt artoolkit ascii ashmem asp.net asp.net-core asp.net-core-webapi asp.net-web-api aspect aspectj aspectj-maven-plugin assembly assert assertion assertj assertthat assets async-await asynchronous atest atof attached-properties attachment attributes audio audio-player audio-service audio-streaming audiotrack augmented-reality auth-guard auth0 authentication auto-generate auto-renewing autocomplete autocompletetextview autofill autolink automated-tests automatic-ref-counting automation automator autostart autotest autowired avaudioplayer avd avd-manager awesome-notifications aws-amplify aws-api-gateway aws-cli aws-device-farm aws-iot aws-iot-core aws-java-sdk-2.x aws-lambda aws-sdk awt axios azure azure-active-directory azure-ad-b2c azure-blob-storage azure-cosmosdb azure-devops azure-devops-hosted-agent azure-maps azure-media-services azure-notificationhub azure-pipelines azure-spatial-anchors azure-storage azure-vm-scale-set azure-web-app-service babeljs back back-button back-stack backend background background-color background-image background-mode background-process background-service backgrounding backtracking backwards-compatibility badge bamboo banner-ads bar-chart barcode barcode-scanner baresip barista barrier base-url base64 bash basic-authentication batch-file bazel bcrypt beacon bean-validation bearer-token bearing beautifulsoup behavior benchmarking bento4 bert-language-model bezier bigdata bigdecimal biginteger binance binance-api-client binary binary-tree binary-xml bind bindableproperty binding bindingadapter bing-maps bintray binutils bionic bit bit-manipulation bit-shift bitbucket bitbucket-pipelines bitmap bitmapfactory bitmapimage bitrate bitrise bitset bitwise-and bitwise-operators bitwise-or blackberry blame blazor blink blob bloc block blockhound blocking blockly blogs bluestacks bluetooth bluetooth-lowenergy bmc boehm-gc boilerplate boolean boost boost-asio boost-serialization boot bootstrap-4 bootstrap-dialog border border-color boringssl bots bottom-sheet bottombar bottomnavigationview bottomsheetdialogfragment bouncycastle bounding-box bounds box2d bpmn braintree branch breadth-first-search breakpoints broadcast broadcastreceiver brotli browser browserstack bubble-sort bubblewrap buffer bufferedimage bufferedreader bugsense build build-error build-runner build-script build-system build-tools build-variant build.gradle builder builder-pattern building buildozer buildpack buildpath bukkit bulletedlist bundle button buttonclick byte byte-buddy bytearray bytearrayoutputstream bz2 c c-preprocessor c# c++ c++-coroutine c++-experimental c++-standard-library c++11 c++14 c++17 c++builder cache-control caching cadence-workflow caffe2 calabash calabash-android calayer calculation calendar calendarview call callback calllog camera canactivate cancellation canny-operator canvas capacitor capacitor-plugin capitalization capitalize captcha card cardview carousel cartodb cascade case cassandra casting cbor cdata cdi-2.0 cell center center-align centering ceres-solver certificate cgo chain chaquopy char character charles-proxy charset chart.js charts chat chatbot chatsdk checkbox checkboxlist checked cheerio children chopper chromakey chrome-custom-tabs chrome-remote-debugging chromium chromium-embedded cil circleci circleci-2.0 city clang clang-tidy clang++ clarity class class-constructors class-design class-diagram classcastexception classloader classnotfoundexception classpath clean-architecture click clickable clickhouse clickhouse-client client client-server clipboard clipping cllocation cllocationmanager clock clone cloudinary cmake cmd cocoa cocoapods cocos2d-x cocos2d-x-2.x code-analysis code-behind code-cleanup code-coverage code-inspection code-reuse code-signing codec coded-ui-tests codemagic codenameone codeship coding-style coil collapse collatz collections collectionview collectors colordrawable colors combobox command command-line command-line-interface comments common-workflow-language communication companion-object comparator compare comparison compass-geolocation compatibility compilation compiler-construction compiler-errors compiler-flags compiler-optimization completable-future completion-stage components composable compose-desktop compose-multiplatform compose-wear compression computer-science computer-vision concatenation concurrency concurrentmodification conditional conditional-compilation conditional-operator conductor config configuration configure confluent-cloud connect connection connection-pooling connection-string connection-timeout connectivity cons console console-application console.log constants constexpr constraint-layout-chains constraintlayout-barrier constraintlayout-guideline constraints constraintset constructor consumption contacts containers contains content-pages content-security-policy content-type contextmenu contextual-action-bar continuous continuous-integration control-flow controller controls controlsfx converters cookies cookiestore coordinates coordinator-layout copy copy-paste copyright-display corda cordova cordova-3 cordova-android cordova-cli cordova-facebook cordova-ios cordova-media-plugin cordova-plugin-advanced-http cordova-plugin-facebook-connect cordova-plugin-fcm cordova-plugin-file cordova-plugin-firebasex cordova-plugin-proguard cordova-plugins cordova-sqlite-storage coredump cornerradius coroutine coroutinescope cors couchdb count countdown countdowntimer counter country cpu cpu-architecture cpu-registers cpu-speed cpu-usage cpython cql cql3 crash crashlytics crashlytics-android credentials cron crop cross-browser cross-compiling cross-origin-read-blocking cross-platform crosswalk crosswalk-runtime crud cryptography cs50 csrf-token css css-grid css-position css-variables cssnano csv cts cubic-bezier cubit cucumber cucumber-java cucumber-jvm cupertinopicker curl cursor cursor-position curve custom-adapter custom-arrayadapter custom-controls custom-data-type custom-error-pages custom-font custom-keyboard custom-lists custom-painting custom-renderer custom-scheme-url custom-url customdialog customization customvalidator cxf cxf-client cyanogenmod cyclic-reference cygwin cypress d-pad daemon dagger dagger-2 dagger-hilt dailymotion-api dalvik dao darkmode dart dart-analyzer dart-async dart-ffi dart-http dart-null-safety dart-pub dart-sdk dart-stream data-access-object data-binding data-class data-mining data-structures data-transfer database database-connection database-design database-inspector database-migration dataflow dataframe datagram datamodel datasource datastax datastax-astra datastore datatable datawedge date date-difference date-format datepicker datetime datetime-format datetimepicker dayofweek days db2 dbunit ddms dead-code debezium debian debug-symbols debugging decimal decimalformat declare-styleable decode decoding decompiler decompiling deep-linking default default-value delay delegates delegation delete-directory delete-file delete-row delimiter delphi dependencies dependency-injection dependency-management deploying deployment deprecated deprecation-warning depth-first-search der deserialization design-patterns desktop-application detect detox development-environment device device-admin device-policy-manager devicecheck devtools dex dexguard dexprotector dhtmlx diagnostics dialog dialogfragment dictionary diff difference digital-signature dimension dio directions directory directory-upload disable disclosure discord discord-jda dismiss dispatch dispatcher dispatchevent distinct divide-and-conquer divider django django-rest-framework dji-sdk dl4j dll dlopen dns docker docker-compose docker-java dockerfile doctype document-provider docusignapi docx dom dom-events dom-to-image domain-driven-design dotnet-httpclient double double-click doubly-linked-list download download-manager dpi drag-and-drop draggable draw drawable drawer drawerlayout drawing driving-directions drm drools drop-down-menu dropbox dropbox-api dropdown dropdownbutton drupal drupal-views dry dsl dtd dto dumpsys duplicates dynamic dynamic-arrays dynamic-delivery dynamic-feature-module dynamic-linking e2e e2e-testing echo eclipse eclipse-adt eclipse-cdt eclipse-collections eclipse-scout ecmascript-6 edit editor effect effective-java effects egl eigen either elastic-appsearch elasticsearch elasticsearch-java-api electron element elf email email-validation embed embedded-linux embedded-resource embedded-v8 eml emulation encapsulation encoding encryption end-to-end enoent entity-framework entitymanager enums enumset environment-variables epub epub3 equalizer equals equation erc20 error-handling es6-promise escaping eslint ethereum ethernet event-bubbling event-handling event-listener event-propagation events excel exception exec executable executorservice exif exit exoplayer exoplayer2.x expand expandablelistadapter expandablelistview expandablerecyclerview expansion explorer expo export express express-session extends extension-function extension-methods extern external external-dependencies fabricjs facebook facebook-android-sdk facebook-audience-network facebook-authentication facebook-graph-api facebook-like facebook-likebox facebook-login facebook-sdk-4.x facebook-unity-sdk facet factory factory-method factory-pattern fade fadein fadeout failed-installation family-tree fastboot fastlane fatal-error favorites fbsdksharedialog feign fetch-api ffimageloading ffmpeg fft field figma file file-access file-descriptor file-handling file-io file-management file-manager file-not-found file-upload file-writing filechooser filenotfoundexception filepath filepicker filereader filesize filesystems filewriter filezilla filter filtering final finally find findviewbyid firebase firebase-admob firebase-analytics firebase-app-distribution firebase-app-indexing firebase-assistant firebase-authentication firebase-cloud-messaging firebase-console firebase-dynamic-links firebase-hosting firebase-mlkit firebase-notifications firebase-performance firebase-realtime-database firebase-security firebase-storage firebase-test-lab firebase-tools firebaseui firefox firefox-addon firemonkey fitted-box fl-chart flags flame flash flask flatpak flexbox flicker floating-action-button flow flowable fluent-ui flume flutter flutter-add-to-app flutter-alertdialog flutter-android flutter-animation flutter-appbar flutter-assetimage flutter-bloc flutter-bottomnavigation flutter-build flutter-card flutter-column flutter-container flutter-cubit flutter-cupertino flutter-custompaint flutter-custompainter flutter-debug flutter-dependencies flutter-design flutter-desktop flutter-doctor flutter-future flutter-futurebuilder flutter-getx flutter-gridview flutter-hive flutter-hooks flutter-hotreload flutter-http flutter-image flutter-integration-test flutter-ios flutter-layout flutter-listview flutter-local-notification flutter-moor flutter-navigation flutter-notification flutter-objectbox flutter-packages flutter-padding flutter-pageview flutter-platform-channel flutter-plugin flutter-provider flutter-pub flutter-redux flutter-release flutter-run flutter-sharedpreference flutter-sliver flutter-state flutter-streambuilder flutter-test flutter-tex flutter-text flutter-textformfield flutter-textinputfield flutter-theme flutter-web flutter-webrtc flutter-widget flutter-windows flutter-workmanager flutter2.0 flutterdriver fluttermap flutterwebviewplugin flyout focus fold font-awesome font-family font-size fonts for-loop foreground foreground-service forge2d format formatter formatting formbuilder formgroups formik forms formula forward fractions fragment fragment-backstack fragment-lifecycle fragment-oncreateview fragment-tab-host fragmentmanager fragmentpageradapter fragmentstateadapter fragmenttransaction frame frameworks fread freemarker freeze freezed fresco fromjson frontend ftp fullcalendar fullcalendar-3 fullscreen function function-composition functional-interface functional-programming functional-testing fuse fusedlocationproviderapi fusedlocationproviderclient future fxml g++ galaxy gallery gameobject garbage-collection gatt gcc gcc-warning gcloud gdb gdbserver gdc gdk gdkpixbuf generic-method generics genymotion geocoding geofencing geofire geohashing geojson geolocation geometry geopoints geospatial gesture gesture-recognition gesturedetector gestures get getcontent getelementbyid getstring getter getter-setter gettext gettimeofday getusermedia ghc ghostscript gif gis git git-blame git-tag github github-actions github-api github-pages gitignore gitlab gitlab-ci glassfish-5 glib glm-math global glow glsl glsles glsurfaceview gmail gmp gmsmapview gmsplacepicker gnu-make gnutls go go-ethereum godaddy-api gomobile google-ads-api google-analytics google-analytics-firebase google-api google-api-client google-api-dotnet-client google-app-engine google-app-indexing google-assistant google-authentication google-bigquery google-breakpad google-calendar-api google-cardboard google-cast google-chrome google-chrome-app google-chrome-devtools google-chrome-os google-chrome-webview google-classroom google-cloud-dataflow google-cloud-endpoints google-cloud-firestore google-cloud-functions google-cloud-messaging google-cloud-platform google-cloud-run google-cloud-sql google-cloud-storage google-codelab google-colaboratory google-developers-console google-directions-api google-distancematrix-api google-docs google-drive-android-api google-drive-api google-fabric google-flexible google-forms google-gdk google-geolocation google-image-search google-latitude google-location-services google-login google-maps google-maps-android-api-2 google-maps-api-2 google-maps-api-3 google-maps-flutter google-maps-markers google-maps-mobile google-mlkit google-nearby google-nearby-connections google-oauth google-pay google-places-api google-play google-play-console google-play-core google-play-developer-api google-play-games google-play-internal-testing google-play-services google-plus google-polyline google-project-tango google-roads-api google-search-api google-settings google-sheets google-sheets-api google-signin google-text-to-speech google-truth google-tv google-vr-sdk googlemobileads googlesigninapi googletest gorouter gprs gps gpu graalvm gradient gradle gradle-android-test-plugi gradle-dependencies gradle-experimental gradle-kotlin-dsl gradle-plugin gradle-task gradlew grails grand-central-dispatch graph graphics graphql gravity grayscale greendao greenrobot-eventbus greenrobot-objectbox grid grid-layout gridbaglayout gridlayoutmanager gridview groovy grpc grpc-java gsap gsl gson gstreamer guava gui-testing guice gulp gwt gwt-jsinterop gzip h.264 h2 hadoop hal hamburger-menu hamcrest hammer.js handler hapijs hardcoded hardware hardware-acceleration hash hashcode hashmap hashset hashtable haskell haxm hc-05 hdmi header header-files headless-browser heads-up-notifications heap heap-memory heatmap height here-api heremaps heremaps-android-sdk heroku hex hfp hibernate hibernate-entitymanager hibernate-envers hibernate-mapping hibernate-tools hibernate-validator hidden-files hide hierarchy higher-order-functions highlighting hikaricp hittest hive hmac hmacsha256 home-screen-widget homebrew homebrew-cask homekit homescreen hook hook-widgets horizontal-scrolling horizontalscrollview host hosting hot-reload hotspot hql href hsqldb html html-dataset html-encode html-parsing html-select html2canvas html5-audio html5-canvas html5-fullscreen html5-video http http-get http-headers http-post http-proxy http-redirect http-referer http-status-code-400 http-status-code-403 http-status-code-405 http2 httpclient httpconnection httpcookie httpexception httprequest httpresponse https httpurlconnection huawei-account huawei-developers huawei-ml-kit huawei-mobile-services huawei-push-notification hugo-logging hybrid-mobile-app hybris hyperledger-indy hyperlink hystrix ibm-midrange icloud icmp iconbutton icons iconv ide identityserver4 idle-processing if-statement iframe ifstream igmp iis il2cpp illegalargumentexception illegalstateexception image image-formats image-gallery image-load image-processing image-reader image-resizing image-rotation image-size imagebutton imagedecoder imageicon imagepicker imagesource imageview iml implementation implements implicit import imu in-app in-app-billing in-app-purchase in-app-subscription in-app-update in-house-distribution inappbrowser indentation indexing indexof indexoutofboundsexception inet infinispan infinite infinite-loop infinite-scroll inflate-exception influxdb infobip inheritance inherited initialization inject inline inline-assembly inotifypropertychanged input input-field inputstream insert insertion-sort instagram instagram-api install-referrer installation instance instance-variables instantiation instrumentation instrumented-test int integer integration integration-testing intellij-14 intellij-idea intellij-lombok-plugin intellij-plugin intellisense intentfilter intentservice intercept interception interceptor interface internal-app-sharing internal-storage internals internationalization internet-connection interrupted-exception interruption interstitial intervals intl intrinsics invokedynamic io ioctl ioexception ion-checkbox ion-content ion-infinite-scroll ion-item ion-menu ion-radio-group ion-range-slider ion-segment ion-select ion-slides ion-toggle ionic ionic-appflow ionic-cli ionic-cordova ionic-framework ionic-native ionic-native-http ionic-plugins ionic-popover ionic-popup ionic-react ionic-storage ionic-tabs ionic-view ionic-vue ionic-webview ionic2 ionic3 ionic4 ionic5 ionic6 ionicons ios ios-lifecycle ios-permissions ios-provisioning ios-simulator ios-statusbar ios13 ios14 ios15 ios4 ios5 ios6 ios8 iostream iot ip ip-address ipa ipad ipc iphone iphone-x ipv6 is-empty iso iso8601 itemizedoverlay items itemsource itemssource itemtouchhelper iteration iterator itext itext7 ivalueconverter ivy jackson jackson-databind jackson2 jacoco jakarta-ee jakarta-mail jar jarsigner jasmine jasmine-node jasmine2.0 java java-10 java-11 java-15 java-17 java-2d java-7 java-8 java-9 java-bytecode-asm java-ee-7 java-ee-8 java-http-client java-me java-memory-leaks java-module java-native-interface java-platform-module-system java-server java-stream java-threads java-time java-websocket java.time.instant java.util.concurrent java.util.scanner javac javacpp javadoc javafx javafx-11 javafx-2 javafx-8 javah javalin javascript javascript-injection javascript-objects jax-rs jaxb jboss jbutton jcenter jcheckbox jcombobox jdbc jdbctemplate jenkins jenkins-pipeline jenkins-plugins jenv jep jersey jersey-2.0 jestjs jetbrains-compose jetbrains-ide jetpack-compose-accompanist jetpack-compose-animation jetpack-compose-navigation jfilechooser jframe jfreechart jgit jhipster jibx jint jira jit jitpack jitsi-meet jjwt jlabel jlayeredpane jlist jls jmc jmeter jmeter-plugins jmx jna jnienv jniwrapper jnotify job-scheduling jodatime jogl jooq joptionpane jpa jpa-2.0 jpanel jpeg jpql jquery jquery-3 jquery-migrate jquery-mobile jquery-plugins jquery-ui jsch jshell json json-deserialization json-serialization json-simple json.net jsoncpp jsonobject jsonparser jsonserializer jsoup jsp jsr jstatd jstl jsvc jtable jtextarea jtextpane jtree junit junit3 junit4 junit5 just-audio justify jvm jvm-arguments jvm-crash jwe jwplayer jwt jxcore kafka-consumer-api kafka-topic kapt karma-jasmine kdoc kendo-ui kernel key key-value-observing keyboard keyboard-shortcuts keycloak keyevent keypress keystore keytool kie kill kill-process kineticjs kiosk kiosk-mode kivy kivy-language kml kmongo kodein koin kotlin kotlin-android kotlin-android-extensions kotlin-companion kotlin-coroutine-channel kotlin-coroutines kotlin-coroutines-flow kotlin-dokka kotlin-dsl kotlin-exposed kotlin-extension kotlin-flow kotlin-js kotlin-lateinit kotlin-multiplatform kotlin-multiplatform-mobile kotlin-native kotlin-null-safety kotlin-reflect kotlin-reified-type-parameters kotlin-script kotlin-sharedflow kotlin-stateflow kotlinc kotlinpoet kotlinx kotlinx.coroutines kotlinx.coroutines.flow kotlinx.serialization ksp ksqldb ktor ktor-client ktorm kubernetes kubernetes-custom-resources kvm label lambda lame lan landscape-portrait lang language-comparisons language-interoperability languagetool laravel laravel-5.7 large-files large-text latitude-longitude launcher launcher-icon launchmode layer-list layout layout-gravity layout-inflater layout-inspector layout-manager layoutparams lazy-evaluation lazy-loading lazycolumn lcm ld ld-preload ldap ldd leaflet leakcanary leanback led legacy letter levenshtein-distance lg lib libav libc libc++ libcurl libdispatch libfaac libgcrypt libgdx libjpeg libjpeg-turbo libm libnice libpcap libpng libraries libreoffice libstdc++ libtiff libunwind libusb libusb-1.0 libvlcsharp libvpx libx264 libxml2 libyuv lifecycle lifecycleowner lighthouse limit line lineageos linear-gradients linear-programming lineargradientbrush linechart lines linked-list linkedhashmap linkedin linker linker-errors linkify linphone linq linq-expressions lint linux linux-kernel liquibase list list.builder listactivity listadapter listener listtile listview live-streaming live-wallpaper livereload lldb llvm llvm-clang load load-testing loaddata loader loading local-storage localdate localdatetime locale localhost localizable.strings localization localnotification localtime location location-href location-services locationlistener locationmanager lockfile lockscreen lodash log4j log4j2 log4shell logback logcat logentries logging logic logout lombok long-click long-integer long-polling long-press look-and-feel loopback loopback-address loops lost-focus lottie lte luajit m2eclipse mac-address machine-learning macos macos-big-sur macos-catalina macros mailcore2 mailto main makefile malloc manifest manifest.mf manual many-to-many many-to-one map map-projections mapactivity mapbox mapbox-android mapbox-marker mapfragment mapkit mapkitannotation mapper mapping mapquest mapreduce maps mapstruct mapview margin margins markdown marker markerclusterer markers masking master-detail match matcher material-components material-components-android material-design material-design-in-xaml material-icons material-ui material-you materialbutton materialcardview materialdatepicker materialdrawer materialpageroute math math.sqrt matlab matrix maui maven maven-2 maven-bom maven-central maven-compiler-plugin maven-dependency-plugin maven-jar-plugin maven-javadoc-plugin maven-plugin md5 mdc media media-player mediaextractor mediarecorder mediastore mediastream mediawiki-api memory memory-leaks memory-management memoryanalyzer memoryview menu menuitem merge mergeddictionaries mesh mesibo meson-build message messaging meta-tags metadata meteor method-reference methods metrics micrometer micronaut micronaut-data micronaut-rest microprocessors microservices microsoft-cognitive microsoft-edge midi migration mime mime-message mime-types minecraft minecraft-forge minimum-spanning-tree mipmaps mirror mirth miui mixins mkannotation mkannotationview mkmapview mobfox mobile mobile-application mobile-browser mobile-development mobx mocking mockito mockito-kotlin mockk mockk-verify mockwebserver modal-dialog modalviewcontroller mode model modifier modular modularity modularization module monads mongo-java-driver mongodb mongodb-java mongodb-query monkey monkeyrunner mono monodevelop monorepo monthcalendar moodle moshi motion motionevent motorola mouse-cursor mouseevent mousewheel move mozilla mp3 mp4 mpandroidchart mpchartios mpeg-dash mpmusicplayercontroller mqtt ms-word msal msal-angular msal.js msbuild msbuild-task mtls multi-module multi-project multi-select multi-tenant multi-touch multicast multichoiceitems multicore multidimensional-array multilingual multipart multiplatform multiple-versions multithreading mupdf mustache mutable mutablelist mutablelivedata mutablemap mutex mutual-authentication mvn-repo mvp mvvm mvvmcross mylocationoverlay mysql named-parameters namespaces nanohttpd nashorn native native-activity native-base native-code nativescript nativescript-angular nativescript-vue nativewindow nav navbar navigation navigation-architecture navigation-compose navigation-drawer navigationbar navigationcontroller navigationview navigator ndef ndk-build ndk-gdb ndk-stack neo4j neon nested nestedrecyclerview netbeans netbeans-11 netbeans-platform netflix-eureka netflix-feign netflix-zuul netlify netlink network-interface network-programming network-state network-traffic networking networkonmainthread new-operator newlib newline newrelic nexus-4 nexus-5 nexus-player nfc ng-class ng-modules ng-otp-input ng2-translate ngcordova ngfor nginx ngmodel ngrx ngrx-effects ngrx-store ngx-bootstrap ngx-datatable ngx-translate nine-patch ninja ninjaframework nio nlog nlp noclassdeffounderror node-gyp node-modules node-rsa node-sass node.js nodes non-nullable non-static nonblocking nook nosql nosuchelementexception nosuchmethoderror notation notification-listener notifications notifydatasetchanged npm npm-install npx nrwl-nx nsmutablestring nsurlrequest nuget nuget-package null nullable nullable-reference-types nullpointerexception nullreferenceexception number-formatting numberformatexception numbers nunit nutiteq nvidia nvm nxt oauth oauth-2.0 obfuscation object object-files objectbox objective-c objective-c-blocks objectmapper oboe obs observable observablecollection observers ocr oculusquest offline offline-caching offset okhttp okhttp3 onactivityresult onbackpressed onchange onclick onclicklistener oncreateoptionsmenu ondestroy ondisappearing ondraw one-time-password one-to-many onedrive oneplus6t onesignal onitemclicklistener onitemlongclicklistener onitemselectedlistener onkeydown onlongclicklistener onpause onrestoreinstancestate onresume onsaveinstancestate onscrolllistener onsen-ui ontouchlistener onvif oop opacity open-source openal openapi openapi-generator opencascade opencl openconnect opencore opencv opencv-stitching opencv3.0 opencv3.1 opencv4 opencv4android opengl opengl-es opengl-es-2.0 opengl-es-3.0 openid openjdk-11 openjfx openlayers openmp opennlp openscenegraph openshift opensl openssl openstreetmap opensuse opentest opentk opentok openvidu openvpn opera operating-system operator-overloading operators oppo optaplanner optimization option optional optionmenu opus oracle orc ordered-map orientation orientation-changes orm ormlite osgi osmdroid osx-mavericks osx-snow-leopard ota out-of-memory outlook overflow overflow-menu overlap overlay overlay-icon-disappear overlayitem overlays overloading overriding overscroll oxyplot p4a package package-info package-private package.json packagereference padding page-curl page-refresh pagination paging paho paint paintcomponent palette pan pane panel panning papaparse parallel-processing parallel.invoke parameter-passing parameters parcelable parent parent-child parseint parsing pascal pass-data password-protection passwords path payment payment-gateway paypal paypal-subscriptions paytm payu pcm pdf pdf-conversion pdf-generation pdf.js pdfbox pdfdocument peer-dependencies peerjs pem pepper percentage performance performance-testing permgen permission-denied permissions permutation persian persistence persistent-storage phaser-framework phone-call phone-number phone-state-listener phonegap phonegap-build phonegap-plugins photo php picasso picker picocli pie-chart pinch pinchzoom ping pinia pinned-shortcut pipe pipeline pixel pixel-density pjsip pjsua2 placeholder platform-tools play-billing-library playback playframework-2.0 plsql plugins plural pmd png pnpm poco-libraries podfile podfile-lock podspec pointers pojo polygon polyline polymer polymorphism popover popup popupmenu popupwindow portability portable-class-library porting position post post-processing postcss postdelayed postgresql postman pouchdb power-management powermock powermockito powershell powershell-2.0 precision predicate preference preferences prefix preflight prelaunch prepared-statement prepend preprocessor pretty-print preview primary-key primeng primes printing println priority-queue prism privacy privacy-policy process processing profiler profiling programmatically progress-bar progress-indicator progressdialog progressive-web-apps proguard proguard-maven-plugin project project-reactor project-structure projection prometheus promise properties properties-file propertychanged protected proto protocol-buffers protractor provider provisioning-profile proxy pthreads publisher pubspec pull-to-refresh push push-back push-notification pushsharp put pyjnius pyqt python python-2.7 python-3.x python-requests python-tesseract qa qemu qml qr-code qt qt-creator qt-quick qt5 qt5.10 quarkus quarkus-panache quartz-scheduler quasar query-parameters querydsl querying quicksort r r-leaflet r.java-file race-condition radio radio-button radio-group random range ranorex rapidapi raspberry-pi3 raspberry-pi4 ratingbar razorpay rdf4j reachability react-datepicker react-hook-form react-hooks react-leaflet react-native react-native-android react-native-cli react-native-component react-native-flatlist react-native-maps react-native-splash-screen react-native-webview react-navigation react-redux react-router react-router-dom react-state-management react-testing-library react-typescript reactive reactive-programming reactjs reactor readelf readline real-time realm recaptcha recaptcha-v3 recording recreate recurring-billing recursion recyclerview-layout redirect redraw redux redux-devtools redux-toolkit reference reference-library referenceerror referrals referrerurl refit reflection refresh regex region registerforactivityresult registration relationship relative-path release release-apk reload remedy reminders remote-control remote-debugging remove-if render renderbox renderer rendering renderscript reorderlist repeater replace replaceall reporters repository request request-mapping required resin resize resolution resourcebundle resources responsive responsive-design rest restart resteasy resttemplate retrofit retrofit2 return return-value reusability revenuecat reverse reverse-engineering reward rfcomm rgb rhino rhodes rhomobile richtextbox right-to-left ringtone ringtonemanager riot-games-api ripple rippledrawable riverpod rjava rn-fetch-blob roboguice robolectric robolectric-gradle-plugin robotium role-based rollupjs root root-access rooted-device rootview ros rotation rounded-corners rounding rounding-error router routerlink routes routing row rsa rselenium rsocket rtcpeerconnection rtk-query rtsp rtti ruby runnable runtime runtime-error runtime-permissions runtimeexception rust rust-cargo rvest rvm rx-android rx-java rx-java2 rxdart rxjs safari safetynet safetynet-api salesforce saml sample samsung-galaxy samsung-mobile sass satellite-navigation save saxparser scaffold scala scala-3 scala-java-interop scale scaling scanning scenebuilder scheduled-tasks scheduledexecutorservice schema scoped-storage screen screen-capture screen-density screen-lock screen-orientation screen-recording screen-resolution screen-rotation screen-scraping screen-size screencast screenshot screenshot-testing scripting-bridge scroll scrollbar scrollcontroller scrolltrigger scrollview sd-card sdk sdl sdl-2 sdp sealed-class search searchbar searchview security seekbar segmentation-fault select selecteditem selection selector selendroid selenium selenium-chromedriver selenium-firefoxdriver selenium-iedriver selenium-webdriver selinux semantic-versioning sendkeys sensors sequence serial-number serial-port serializable serialization server server-side server-side-attacks serversocket service service-discovery service-worker servicestack servicetestcase servlet-filters servlets session session-cookies session-timeout session-variables set setcontentview setfocus setinterval setstate settext settings settings.bundle setvalue sf sfml sh sha sha1 sha512 shader shadow shake shapes share share-intent shared-element-transition shared-libraries shared-memory sharedflow sharedpreferences sharing sharp shebang shell shimmer shiny shippo shopify shortcut shortest-path shoutcast show-hide shrink shrinkresources shuffle shutdown sift sign signal-strength signalr signalr-hub signals signature signed signed-apk signing simd similarity simple-framework simplecursoradapter simpledateformat simplexmlconverterfactory simulator single-page-application single-sign-on singlechildscrollview singleton sip size skia skin sleep slf4j slide slider sliding slidingdrawer slidingmenu sliver-grid sliverappbar smali smartphone smooth-scrolling smoothing sms smtp snackbar snapshot snowflake-cloud-data-platform soap social-media socialsharing-plugin socket-timeout-exception socket.io socketexception socketfactory sockets soft-keyboard solus solution sonarcloud sonarqube soot sorting soundeffect soundpool source-maps source-sets space spaces spannablestringbuilder speaker special-characters speech-recognition speex spell-checking spinner splash-screen split spock spoon spotbugs spreadsheet spring spring-amqp spring-aspects spring-async spring-batch spring-boot spring-boot-test spring-camel spring-cloud spring-cloud-aws spring-cloud-contract spring-cloud-feign spring-cloud-netflix spring-cloud-sleuth spring-data spring-data-elasticsearch spring-data-jpa spring-data-mongodb spring-data-neo4j spring-data-redis spring-data-rest spring-framework-beans spring-hateoas spring-integration spring-integration-dsl spring-jdbc spring-kafka spring-kafka-test spring-mvc spring-mvc-test spring-oauth2 spring-profiles spring-rabbit spring-repositories spring-retry spring-security spring-security-oauth2 spring-test spring-thymeleaf spring-tool-suite spring-transactions spring-validator spring-webclient spring-webflux spring-webtestclient spring5 springfox springmockito sqflite sql sql-insert sql-order-by sql-server sql-update sqlcipher sqlcipher-android sqldelight sqlite sqlite-json1 sqlite-net sqlite-net-pcl sqlite.net sqliteopenhelper square sse ssl ssl-certificate sslerrorhandler sslhandshakeexception sslpinning stack stack-overflow stack-trace stackdriver stagefright staggered-gridview staggeredgridlayout start-activity startactivityforresult startup state state-management stateflow stateful statefulwidget statelesswidget statelistdrawable static static-analysis static-initialization static-libraries static-linking staticresource status statusbar std stdin stdout stenciljs stepper stl stoppropagation storage storage-access-framework stored-procedures storybook str-replace strategy-pattern stream stream-builder strftime string string-conversion string-formatting string-substitution string.xml stringbuilder stripe-payments stripes struts2 stub stubbing stubby4j stun styles stylesheet styling stylus-pen su subdirectory subscription substitution subtype sugarorm sum supabase superpowered supportmapfragment suppress-warnings surf surfaceview suspend svelte svelte-3 svg swagger swagger-codegen swagger-ui swap swift swift-keyboard swift3 swiftui swig swing swipe swipe-gesture swiper swiper.js swiperefreshlayout swiperjs switch-statement switchpreference symbols syncfusion synchronization synchronized syntax syntax-error syntax-highlighting synth sysfs system system-alert-window system-calls system-properties system.out system.reactive systemtime systrace tabbar tabbarcontroller tabbedpage tablet tableview tabmenu tabs tabview taglib tailwind-css talkback tap target-sdk targetsdkversion task tasklist taskstackbuilder tcp tcpclient tdd teamcity teamspeak tel telecommunication telegram telegram-bot telephony telephonymanager templates temporal-workflow temporary-files tensorflow tensorflow-lite terminal terminate tess-two tess4j tesseract test-runner testcase testcontainers testdroid testing testing-support-library testng tethering text text-cursor text-editor text-formatting text-recognition text-size text-to-speech text-widget textarea textcolor textfield textformfield textinputlayout textmatching textview theme-daynight themes this thread-safety threadpool threadpoolexecutor three.js thumbnails thymeleaf tile tiles timber-android time timeago timeofday timeout timepicker timer timestamp timezone tinylog titanium titleview tls1.2 toast todo tofixed toggle togglebutton tokbox token tomcat tomcat6 tomcat9 tomtom toolbar toolchain toolkit tooltip tor tostring touch touch-event touch-id trace tracking tradingview-api transactions transcoding transform translate translation-editor translucency transparency transparent transpose travis-ci trayicon tree treenode treeview trigger.io trigonometry trim truetype truffle truncate trusted-web-activity try-catch try-finally try-with-resources tsx tun tuples turn turtle-rdf tvos twa twilio-video twisted twitch twitter twitter-bootstrap twitter-fabric twitter-oauth twitter4j txt type-bounds type-conversion type-erasure type-inference type-mismatch typed-arrays typedarray typedef typeface typeorm types typescript typescript2.0 typetoken uber-api uber-cadence ubuntu ubuntu-14.04 ubuntu-16.04 ubuntu-17.04 ubuntu-20.04 udp ui-automation ui-testing ui-thread uialertcontroller uicollectionview uicolor uicontrol uid uidevice uidocumentinteractioncontroller uigesturerecognizer uiimage uiimagepickercontroller uilongpressgesturerecogni uimanager uinavigationbar uinavigationcontroller uiscenedelegate uisearchbar uisegmentedcontrol uitableview uitest uitextview uiviewanimation uiwebview uml unauthorized undefined undefined-reference underline undo unicode unicode-escapes uninstallation unique-constraint uniqueidentifier unit-testing units-of-measurement unity3d unix-socket unix-timestamp uno-platform unreal-engine4 unsatisfiedlinkerror unsubscribe unzip up-button up-navigation updates upgrade upload uri uri-scheme url url-encoding url-launcher url-redirection url-scheme url-validation urlencode usagestatsmanager usb usb-debugging usbserial use-case use-reducer user-agent user-controls user-data user-experience user-inactivity user-input user-interface user-management user-permissions userlocation ussd utf-8 uuid uwp v8 vaadin vaadin-flow valgrind validation var varbinary variable-types variables vbox vcf-vcard vector vector-graphics velocity verbose verify verilator version version-control versioning vert.x vertical-alignment vertical-scrolling vetur video video-capture video-embedding video-library video-processing video-recording video-streaming video.js videocall videochat view viewanimator viewchild viewflipper viewgroup viewmodel viewmodel-savedstate viewpagerindicator viewport viewstub viewswitcher vim vimeo vimeo-android virtual virtual-machine virtual-memory virtual-serial-port virtualbox virtualization virtualscroll visibility visible visual-studio visual-studio-2010 visual-studio-2012 visual-studio-2013 visual-studio-2015 visual-studio-2017 visual-studio-2019 visual-studio-2022 visual-studio-app-center visual-studio-code visual-studio-debugging visual-studio-mac visualvm vlc vmware-fusion voice voice-recognition voiceover void voip voip-android volatile volume vp8 vpn vscode-extensions vscode-settings vscode-snippets vt-x vtk vue-cli-4 vue-component vue-composition-api vue-native vue-router vue-router4 vue-suspense vue.js vuejs2 vuejs3 vuex vulkan vuzix w3c-geolocation wai-aria wait wake-on-lan wallpaper warnings was watch-face-api watermark wav wayland wchar-t weak-references wear-os wear-os-tiles web web-applications web-based web-component web-deployment web-hosting web-inspector web-scraping web-services web-sql web-worker web3-java webapi webarchive webcam webchromeclient webclient webdriver webdriverwait webflux webgl webgpu webhooks webkit webm webp webpack webpage webrtc webrtc-android webserver websocket websocket-sharp webstorm webview webview-flutter webview2 webviewchromium webviewclient wechat weekday weka wgs84 whatsapp while-loop whitespace widevine widget widget-test-flutter width wifi wifimanager wifip2p wikidata-api wildcard wildfly wildfly-26 window window-soft-input-mode windowbuilder windowinsets windows windows-10 windows-11 windows-phone-8 windows-store windows-store-apps windows-subsystem-for-linux winui-3 wireguard wireless wkwebview wmf wmi wms woocommerce word word-wrap wordle-word-cloud wordpress wordpress-rest-api worker wowza wpf ws wvd x264 x509 x509certificate x509certificate2 x86 x86-64 xamarin xamarin-community-toolkit xamarin-linker xamarin-shell xamarin-studio xamarin-test-cloud xamarin.android xamarin.auth xamarin.communitytoolkit xamarin.essentials xamarin.forms xamarin.forms.carouselview xamarin.forms.listview xamarin.forms.maps xamarin.forms.shell xamarin.ios xamarin.mac xamarin.shell xamarin.uitest xamarin.uwp xaml xcasset xcode xcode12 xcode5 xcode6 xcode7 xcodebuild xhtml xiaomi xib xjc xliff xml xml-drawable xml-namespaces xml-parsing xml-serialization xml-validation xmlhttprequest xpath xsd xstream xtensor xwalkview xwpf yahoo-search yaml yarnpkg yaxis yeoman youtube youtube-api youtube-data-api youtube-dl youtube-iframe-api yup z-index z-order zip zip4j zipalign zipfile zlib zoneddatetime zooming zxing zxing.net zxing.net.mobile

Copyright © AndroidBugFix