Coder Social home page Coder Social logo

Comments (27)

YevgenijZ avatar YevgenijZ commented on September 20, 2024 2

I'm using Androidx.Preferences from NuGet - pre version "-rc1" and GetDefaultSharedPreferences is missing, dotPeek does not show presence of this method either, method was available in pre version "-preview06". Maybe something wrong was uploaded to NuGet?

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024 1

@moljac
Why not delist rc1 package it's missing crucial part of androidx.preference api?

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024 1

PreferenceScreen is derived from PreferenceGroup and therefore Preference and Preference should contain getSharedPreferences (SharedPreference in C#).
The code PreferenceScreen.SharedPreferences.RegisterOnSharedPreferenceChangeListener assuming it's inside PreferenceFragment should compile without CS1061.

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024 1

@moljac Did you mean check rc2? Yes, rc2 has same problem, method is missing.

from androidx.

moljac avatar moljac commented on September 20, 2024 1

@YevgenijZ @auedbaki

Both MacOSX and Windows Azure DevOps (CI) build servers are generating correct code now.

Fixed in:

https://github.com/xamarin/AndroidX/releases/tag/AndroidX-rc3

Waiting for Americans to wake up, so somebody will press the green button to publish nuget[s].

Please provide feedback whether the issue is fixed. Even better close it yourself. Thanks

from androidx.

moljac avatar moljac commented on September 20, 2024 1

@YevgenijZ @auedbaki

https://www.nuget.org/packages/Xamarin.AndroidX.Preference/1.1.0-rc3

Feedback please

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024 1

GetDefaultSharedPreferences is back in rc3. It's alright to close issue. Thanks!

from androidx.

moljac avatar moljac commented on September 20, 2024 1

Will leave it for a bit to get more info.

@auedbaki Thanks

from androidx.

auedbaki avatar auedbaki commented on September 20, 2024

Getting same issue Xamarin.AndroidX.Preference 1.1.0-rc1
and No FindPreference Method on Xamarin.AndroidX.Preference 1.1.0-preview6

from androidx.

moljac avatar moljac commented on September 20, 2024

@YevgenijZ
Well I did not change anything in the bindings. Only updates (OS, IDE, tooling)...

in my generated code:

		static Delegate cb_getSharedPreferences;
#pragma warning disable 0169
		static Delegate GetGetSharedPreferencesHandler ()
		{
			if (cb_getSharedPreferences == null)
				cb_getSharedPreferences = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, IntPtr>) n_GetSharedPreferences);
			return cb_getSharedPreferences;
		}

		static IntPtr n_GetSharedPreferences (IntPtr jnienv, IntPtr native__this)
		{
			global::AndroidX.Preference.PreferenceManager __this = global::Java.Lang.Object.GetObject<global::AndroidX.Preference.PreferenceManager> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
			return JNIEnv.ToLocalJniHandle (__this.SharedPreferences);
		}
#pragma warning restore 0169

		public virtual unsafe global::Android.Content.ISharedPreferences SharedPreferences {
			// Metadata.xml XPath method reference: path="/api/package[@name='androidx.preference']/class[@name='PreferenceManager']/method[@name='getSharedPreferences' and count(parameter)=0]"
			[Register ("getSharedPreferences", "()Landroid/content/SharedPreferences;", "GetGetSharedPreferencesHandler")]
			get {
				const string __id = "getSharedPreferences.()Landroid/content/SharedPreferences;";
				try {
					var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, null);
					return global::Java.Lang.Object.GetObject<global::Android.Content.ISharedPreferences> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
				} finally {
				}
			}
		}

So getSharedPreferences is bound as property.

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024

@moljac
Although I mentioned GetDefaultSharedPreferences(Context context) - Java: getDefaultSharedPreferences(Context context)

from androidx.

moljac avatar moljac commented on September 20, 2024

@YevgenijZ

This

		// Metadata.xml XPath method reference: path="/api/package[@name='androidx.preference']/class[@name='PreferenceManager']/method[@name='getDefaultSharedPreferences' and count(parameter)=1 and parameter[1][@type='android.content.Context']]"
		[Register ("getDefaultSharedPreferences", "(Landroid/content/Context;)Landroid/content/SharedPreferences;", "")]
		public static unsafe global::Android.Content.ISharedPreferences GetDefaultSharedPreferences (global::Android.Content.Context context)
		{
			const string __id = "getDefaultSharedPreferences.(Landroid/content/Context;)Landroid/content/SharedPreferences;";
			try {
				JniArgumentValue* __args = stackalloc JniArgumentValue [1];
				__args [0] = new JniArgumentValue ((context == null) ? IntPtr.Zero : ((global::Java.Lang.Object) context).Handle);
				var __rm = _members.StaticMethods.InvokeObjectMethod (__id, __args);
				return global::Java.Lang.Object.GetObject<global::Android.Content.ISharedPreferences> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
			} finally {
			}
		}

??

from androidx.

moljac avatar moljac commented on September 20, 2024

@auedbaki
In downloaded decompiled package (ILSpy) I see FindPreference 2 overloads.

https://www.nuget.org/packages/Xamarin.AndroidX.Preference/1.1.0-rc1

Generated code:

		static Delegate cb_findPreference_Ljava_lang_CharSequence_;
#pragma warning disable 0169
		static Delegate GetFindPreference_Ljava_lang_CharSequence_Handler ()
		{
			if (cb_findPreference_Ljava_lang_CharSequence_ == null)
				cb_findPreference_Ljava_lang_CharSequence_ = JNINativeWrapper.CreateDelegate ((Func<IntPtr, IntPtr, IntPtr, IntPtr>) n_FindPreference_Ljava_lang_CharSequence_);
			return cb_findPreference_Ljava_lang_CharSequence_;
		}

		static IntPtr n_FindPreference_Ljava_lang_CharSequence_ (IntPtr jnienv, IntPtr native__this, IntPtr native_key)
		{
			global::AndroidX.Preference.PreferenceManager __this = global::Java.Lang.Object.GetObject<global::AndroidX.Preference.PreferenceManager> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
			global::Java.Lang.ICharSequence key = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> (native_key, JniHandleOwnership.DoNotTransfer);
			IntPtr __ret = JNIEnv.ToLocalJniHandle (__this.FindPreference (key));
			return __ret;
		}
#pragma warning restore 0169

		// Metadata.xml XPath method reference: path="/api/package[@name='androidx.preference']/class[@name='PreferenceManager']/method[@name='findPreference' and count(parameter)=1 and parameter[1][@type='java.lang.CharSequence']]"
		[Register ("findPreference", "(Ljava/lang/CharSequence;)Landroidx/preference/Preference;", "GetFindPreference_Ljava_lang_CharSequence_Handler")]
		[global::Java.Interop.JavaTypeParameters (new string [] {"T extends androidx.preference.Preference"})]
		public virtual unsafe global::Java.Lang.Object FindPreference (global::Java.Lang.ICharSequence key)
		{
			const string __id = "findPreference.(Ljava/lang/CharSequence;)Landroidx/preference/Preference;";
			IntPtr native_key = CharSequence.ToLocalJniHandle (key);
			try {
				JniArgumentValue* __args = stackalloc JniArgumentValue [1];
				__args [0] = new JniArgumentValue (native_key);
				var __rm = _members.InstanceMethods.InvokeVirtualObjectMethod (__id, this, __args);
				return (Java.Lang.Object) global::Java.Lang.Object.GetObject<global::Java.Lang.Object> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
			} finally {
				JNIEnv.DeleteLocalRef (native_key);
			}
		}

		public global::Java.Lang.Object FindPreference (string key)
		{
			global::Java.Lang.String jls_key = key == null ? null : new global::Java.Lang.String (key);
			global::Java.Lang.Object __result = FindPreference (jls_key);
			var __rsval = __result;
			jls_key?.Dispose ();
			return __rsval;
		}

from androidx.

moljac avatar moljac commented on September 20, 2024

@YevgenijZ @auedbaki

We work on our bindings tools too, so that might be the reason. I don't think that nuget upload/publishing would mess something up.

I will close this issue. Methods/properties should appear in rc2 or stable soon.

from androidx.

auedbaki avatar auedbaki commented on September 20, 2024

@moljac
On writing
ISharedPreferences sharedPreferences = PreferenceManager.GetDefaultSharedPreferences(Application.Context);
Getting Error:
Error CS1061: 'PreferenceManager' does not contain a definition for 'GetDefaultSharedPreferences' and no accessible extension method 'GetDefaultSharedPreferences' accepting a first argument of type 'PreferenceManager' could be found (are you missing a using directive or an assembly reference?)

On register and unregister using this code:

public override void OnResume()
        {
            base.OnResume();
            PreferenceScreen.SharedPreferences.RegisterOnSharedPreferenceChangeListener(this);
        }

        public override void OnPause()
        {
            base.OnPause();
            PreferenceScreen.SharedPreferences.UnregisterOnSharedPreferenceChangeListener(this);
        }

Getting error about SharedPreferences from PreferenceScreen
Error CS1061: 'PreferenceScreen' does not contain a definition for 'SharedPreferences' and no accessible extension method 'SharedPreferences' accepting a first argument of type 'PreferenceScreen' could be found (are you missing a using directive or an assembly reference?) (CS1061)

from androidx.

moljac avatar moljac commented on September 20, 2024

@YevgenijZ I cannot delist packages. What else is missing?

from androidx.

moljac avatar moljac commented on September 20, 2024

@auedbaki
I am aware of GetDefaultSharedPreferences missing.

Regarding PreferenceScreen it would make sense to open new issue.

from androidx.

YevgenijZ avatar YevgenijZ commented on September 20, 2024

Alright then. Makes sense to close this issue when fix will be confirmed though to have public information that rc1 is missing something. Anyway i'm happy that you see the problem and it will be fixed.

from androidx.

moljac avatar moljac commented on September 20, 2024

@auedbaki

Decompiled java:

package androidx.preference;

import android.content.*;
import android.util.*;
import androidx.core.content.res.*;

public final class PreferenceScreen extends PreferenceGroup
{
    private boolean mShouldUseGeneratedIds;
    
    public PreferenceScreen(final Context context, final AttributeSet attrs) {
        super(context, attrs, TypedArrayUtils.getAttr(context, R.attr.preferenceScreenStyle, 16842891));
        this.mShouldUseGeneratedIds = true;
    }
    
    @Override
    protected void onClick() {
        if (this.getIntent() != null || this.getFragment() != null || this.getPreferenceCount() == 0) {
            return;
        }
        final PreferenceManager.OnNavigateToScreenListener listener = this.getPreferenceManager().getOnNavigateToScreenListener();
        if (listener != null) {
            listener.onNavigateToScreen(this);
        }
    }
    
    @Override
    protected boolean isOnSameScreenAsChildren() {
        return false;
    }
    
    public boolean shouldUseGeneratedIds() {
        return this.mShouldUseGeneratedIds;
    }
    
    public void setShouldUseGeneratedIds(final boolean shouldUseGeneratedIds) {
        if (this.isAttached()) {
            throw new IllegalStateException("Cannot change the usage of generated IDs while attached to the preference hierarchy");
        }
        this.mShouldUseGeneratedIds = shouldUseGeneratedIds;
    }
}

from androidx.

auedbaki avatar auedbaki commented on September 20, 2024

@moljac You are right this is not the issue with PreferenceScreen, I just check the Original Docs from Google, and can say PreferenceScreen Class is Clean, and has no bug. May be it can be the issue of Binding Tools too.

from androidx.

moljac avatar moljac commented on September 20, 2024

@YevgenijZ @auedbaki

Can you check rc1 of the package please?

NOTE: seems that the class is still missing. Not sure. There is duplicate issue with the details. Method is generated locally, but seems not to be generated on the CI servers during build and publish. This points out on the different tooling versions.

from androidx.

moljac avatar moljac commented on September 20, 2024

Duplicate
#46

from androidx.

moljac avatar moljac commented on September 20, 2024

Related:

dotnet/java-interop#501

from androidx.

moljac avatar moljac commented on September 20, 2024

Related:
dotnet/java-interop#543

CI servers should use 16.5 P2

from androidx.

moljac avatar moljac commented on September 20, 2024

Bumped Xamarin to 16.5 on CI bots

https://github.com/xamarin/AndroidX/blob/master/azure-pipelines.yml#L29

e8fa9e8

from androidx.

auedbaki avatar auedbaki commented on September 20, 2024

Yes, It's working now. You can close this issue.

from androidx.

moljac avatar moljac commented on September 20, 2024

Closing it. Preparing stable

from androidx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.