পরামর্শ ঘোরান

অ্যান্ড্রয়েড 8.0-এ, ব্যবহারকারীরা কুইকসেটিংস টাইল বা ডিসপ্লে সেটিংস ব্যবহার করে অটো-রোটেট এবং পোর্ট্রেট রোটেশন মোডগুলির মধ্যে টগল করতে পারে। Android 9-এ, ডিভাইসের অবস্থান পরিবর্তন হলেও বর্তমান স্ক্রীন রোটেশন পিন করে অনিচ্ছাকৃত ঘূর্ণন দূর করতে আমরা প্রতিকৃতি ঘূর্ণন মোড আপডেট করেছি। ব্যবহারকারীরা নেভিগেশন বারে একটি নতুন বোতাম টিপে প্রয়োজনে ম্যানুয়ালি ঘূর্ণন ট্রিগার করতে পারেন। আমরা পোর্ট্রেট মোডের নাম পরিবর্তন করে ঘূর্ণন লক করেছি এবং স্বয়ংক্রিয়-ঘোরানো বন্ধ থাকলে এটি সক্রিয় হয়। স্বয়ংক্রিয়-ঘোরান মোডে কোন পরিবর্তন নেই।

যখন ডিভাইসটি ঘূর্ণন লক মোডে থাকে, ব্যবহারকারীরা তাদের স্ক্রীনকে উপরের, দৃশ্যমান কার্যকলাপ (বর্তমান সিস্টেমের সীমাবদ্ধতা প্রদত্ত) দ্বারা সমর্থিত যেকোনো ঘূর্ণনে লক করতে পারে। যদি শীর্ষ কার্যকলাপ স্বয়ংক্রিয়-ঘোরান মোডে একাধিক ঘূর্ণনে রেন্ডার করা যায়, তবে কার্যকলাপের screenOrientation সেটিং এর উপর ভিত্তি করে কিছু ব্যতিক্রম সহ একই বিকল্পগুলি রোটেশন লক মোডে উপলব্ধ হওয়া উচিত।

ঘূর্ণন লক মোড ডিভাইস ঘূর্ণন পরিবর্তনে নেভিবারে একটি বোতাম দেখিয়ে কাজ করে। এটি সম্পন্ন করার জন্য, স্বয়ংক্রিয়-ঘোরানো বন্ধ থাকা অবস্থায়ও ডিভাইসের ওরিয়েন্টেশন সেন্সরকে সক্রিয় থাকতে হবে। এই বোতামটি আলতো চাপলে ব্যবহারকারীর ঘূর্ণন পছন্দগুলি কার্যকরভাবে সেট করে ( Settings.System.USER_ROTATION )। WindowManager সিস্টেমের ঘূর্ণন পরিবর্তন করতে, শীর্ষ ক্রিয়াকলাপ এবং সিস্টেমের অবস্থা সম্পর্কে অন্যান্য বিবরণ সহ এই পছন্দটি ব্যবহার করে। WindowManager ব্যবহারকারীর ঘূর্ণন পছন্দ ব্যবহার করা অব্যাহত রাখে যখন অন্য একটি ক্রিয়াকলাপে যাওয়ার সময় সিস্টেমকে কোন ঘূর্ণন রেন্ডার করতে হবে তা নির্ধারণ করে।

এই জিআইএফ পোর্ট্রেট ওরিয়েন্টেশনে স্ক্রীন সহ ল্যান্ডস্কেপ ওরিয়েন্টেশনে একটি ফোন দেখায়। একটি আইকন ব্যবহারকারীকে জিজ্ঞাসা করবে যে তারা তাদের পর্দার অভিযোজন ল্যান্ডস্কেপে পরিবর্তন করতে চায় কিনা।
চিত্র 1 . "হোম বোতামে সোয়াইপ আপ" ইঙ্গিত সক্ষম করে সাজেশন বোতামটি ঘোরান৷

ক্রিয়াকলাপগুলির মধ্যে সরানোর সময় ব্যবহারকারীর ঘূর্ণন পছন্দ বজায় রাখা উচিত। যাইহোক, যেহেতু বেশিরভাগ ফোন ব্যবহারকারীরা শুধুমাত্র একটি সংক্ষিপ্ত, অস্থায়ী সময়ের জন্য ল্যান্ডস্কেপে থাকতে চান, আমরা প্রাকৃতিক অভিযোজন পক্ষপাত যোগ করেছি। যখনই সিস্টেমের ঘূর্ণন ডিভাইসের প্রাকৃতিক অভিযোজনে পরিবর্তিত হয় তখন ব্যবহারকারীর ঘূর্ণন পছন্দ ডিভাইসের প্রাকৃতিক অভিযোজনে পুনরায় সেট করা হয়। বেশিরভাগ ফোনের জন্য, ডিভাইসের স্বাভাবিক অভিযোজন হল প্রতিকৃতি (0º)। শুধুমাত্র পোর্ট্রেট অ্যাপ ব্যবহার করার সময়, ফোন লক করা বা লঞ্চার ওয়ার্কস্পেসে ফিরে যাওয়ার সময় ব্যবহারকারীর ঘূর্ণন পছন্দ রিসেট করা প্রায়ই ঘটে।

ব্যবহারকারীদের জন্য ঘূর্ণন মিথস্ক্রিয়া গত দশকে খুব বেশি পরিবর্তন হয়নি। ব্যবহারকারীদের নেভিগেশন বারে ঘূর্ণন এবং বোতামের অবস্থানের সাথে তাদের পূর্বের ইতিহাসের কারণে এই বৈশিষ্ট্যটি আবিষ্কার করা কঠিন হতে পারে। এই কারণে, আমরা ঘূর্ণন বোতামে একটি ভূমিকা মোড যুক্ত করেছি যা এটি প্রদর্শিত হলে হাইলাইট করে। ইন্ট্রো মোড আচরণ শুধুমাত্র প্রথম কয়েকটি বোতাম ইন্টারঅ্যাকশনের জন্য ঘটে যার পরে ভূমিকা মোড অক্ষম করা হয়।

উৎস

অ্যান্ড্রয়েড 9-এ ঘূর্ণন পরামর্শের জন্য সমর্থন যোগ করা হয়েছে৷ বেশিরভাগ পরিবর্তনগুলি নিম্নলিখিত ফাইলগুলির মধ্যে রয়েছে৷

  • services/.../server/policy/PhoneWindowManager.java :
    • WindowOrientationListener এর আউটপুট গ্রহণকারী হুক ( MyOrientationListener , ডিভাইসটি ঘোরানো হয়েছে কিনা তা নির্ধারণ করতে সেন্সর নিরীক্ষণের জন্য দায়ী)
    • স্বয়ংক্রিয়-ঘোরানো অক্ষম থাকা অবস্থায়ও WindowOrientationListener সক্রিয় রাখে ( needSensorRunningLp() দেখুন)
    • ব্যবহারকারীর ঘূর্ণন পছন্দ, শীর্ষ ক্রিয়াকলাপ screenOrientation সেটিংস এবং সিস্টেমের স্থিতি প্রদত্ত সিস্টেম ঘূর্ণন গণনা করে ( rotationForOrientationLw() দেখুন )
    • শীর্ষ কার্যকলাপ একটি প্রদত্ত ঘূর্ণন ঘোরাতে পারে কিনা তা নির্ধারণ করুন (দেখুন isRotationChoicePossible() )
  • SystemUI/.../statusbar/phone/NavigationBarFragment :
    • PhoneWindowManager থেকে ঘূর্ণন পরামর্শ কলব্যাকে নেভিবার বোতামটি দেখানো উচিত কিনা তা নির্ধারণ করে (দেখুন onRotationProposal() )
    • ঘোরান নেভিবার বোতামটি কখন লুকাতে হবে তা পরিচালনা করে ( setRotateSuggestionButtonState(false) )
    • যখন নেভিবার লুকানো থাকে (সাধারণত পূর্ণ স্ক্রীনে) বিশেষ ক্ষেত্রে সহ বোতামের সময়সীমা পরিচালনা করে
    • ডিভাইসের স্বাভাবিক স্থিতিবিন্যাস ( mRotationWatcher ) এ ফিরে আসার পরে ব্যবহারকারীর পছন্দ পুনরায় সেট করে
    • নেভিগেশন NavigationBarView প্রয়োগ করা নেভিগেশন বার বোতাম অ্যানিমেশনের জন্য উপযুক্ত শৈলী বেছে নেয় ( onRotationProposal() দেখুন)
    • বিশেষায়িত অ্যানিমেশন সহ ভূমিকা মোড যুক্তি যোগ করে (সেটিংসের রেফারেন্স দেখুন। Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED )
    • disable2 ঘূর্ণন পতাকা প্রয়োগ করে (দেখুন disable() )
  • SystemUI/.../statusbar/phone/NavigationBarView.java :
    • মুলতুবি ঘূর্ণনের সাথে মেলে শৈলী বোতাম আইকন অ্যানিমেশন ( updateRotateSuggestionButtonStyle() দেখুন)
    • বোতামের দৃশ্যমানতার পরিবর্তনগুলি পরিচালনা করে (দেখুন setRotateButtonVisibility() ), নির্দিষ্ট অ্যাক্সেসিবিলিটি পরিষেবাগুলি সক্রিয় থাকলে ঘোরান বোতামটি লুকানোর যুক্তি সহ (ডান-সবচেয়ে নেভিবার বোতাম স্ট্যাক র‌্যাঙ্কিংয়ের জন্য অ্যাকাউন্টিং)
  • SystemUI/res/layout/menu_ime.xml :
    • ঘোরান বোতামের জন্য একটি নতুন KeyButtonView অন্তর্ভুক্ত, মেনু এবং IME/কীবোর্ড চয়নকারীর উপরে কিন্তু অ্যাক্সেসিবিলিটি বোতামের নীচে স্ট্যাক করা আছে
  • SystemUI/res/drawable/ic_sysbar_rotate_button.xml :
    • জটিল AnimatedVectorDrawable ঘোরান নেভিবার বোতামটি অ্যানিমেট করতে ব্যবহৃত হয়
    • স্টাইলিং ( SystemUI/res/values/styles.xml এ) ঘূর্ণনের শুরু এবং শেষ কোণ সেট করতে ব্যবহৃত হয় যাতে একই অঙ্কনযোগ্য বিভিন্ন শুরু এবং শেষ ঘূর্ণন অ্যানিমেট করতে ব্যবহার করা যেতে পারে
    • আইকন টিন্টিং TintedKeyButtonDrawable এর মাধ্যমে সেট করা হয়েছে

বাস্তবায়ন

সফ্টওয়্যার নেভিগেশন কী (ব্যাক, হোম, ইত্যাদি) ব্যবহার করে এমন ডিভাইসগুলির জন্য কাজ করে এমন ঘূর্ণন পরামর্শগুলি পেতে Android 9-এ সমস্ত প্রয়োজনীয় পরিবর্তন অন্তর্ভুক্ত রয়েছে।

ডিভাইস নির্মাতারা যারা হার্ডওয়্যার নেভিগেশন কী দিয়ে ডিভাইস তৈরি করে যারা এই বৈশিষ্ট্যটি বাস্তবায়ন করতে চায় তাদের নিজস্ব সিস্টেম UI সামর্থ্য ডিজাইন এবং প্রয়োগ করতে হবে বা বৈশিষ্ট্যটি নিষ্ক্রিয় করতে হবে। ডিভাইসটিকে বর্তমান সিস্টেম ঘূর্ণনে 90º বা 180º এ রাখা হলে এবং দ্রুত অ্যাক্সেসযোগ্য হলে যে কোনো প্রবর্তিত পৃষ্ঠটি ব্যবহার করা সহজ হওয়ার পরামর্শ দেওয়া হয়। এই কারণে, বিজ্ঞপ্তিগুলির ব্যবহার (যেমনটি IME/কীবোর্ড পিকারের জন্য করা হয়) সুপারিশ করা হয় না।

এই বৈশিষ্ট্যটি ব্যবহার করার জন্য হার্ডওয়্যার প্রয়োজনীয়তাগুলি স্বয়ংক্রিয়-ঘোরানো ব্যবহার করার প্রয়োজনীয়তার মতোই।

বাস্তবায়নের সামঞ্জস্যের জন্য এটি প্রয়োজনীয় যে ব্যবহারকারীর ঘূর্ণন পছন্দ ( Settings.System.USER_ROTATION ) ডিভাইসের স্বাভাবিক ঘূর্ণনে পুনরায় সেট করা হয় যখন সিস্টেমটি ডিভাইসের স্বাভাবিক ঘূর্ণনে পরিবর্তন হয় যখন অটো-রোটেট বন্ধ থাকে। প্রদত্ত বাস্তবায়ন এটি করে (দেখুন NavigationBarFragment.mRotationWatcher )।

একটি নতুন পতাকা রয়েছে StatusBarManager.disable2 এ সাময়িকভাবে ঘূর্ণন পরামর্শগুলিকে উপস্থিত হওয়া থেকে আটকাতে। StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS দেখুন।DISABLE2_ROTATE_SUGGESTIONS। এই পতাকাটি সমস্ত বাস্তবায়নে অবশ্যই সম্মান করা উচিত কারণ এটি সেটআপ উইজার্ড সহ জটিল সিস্টেম অ্যাপ দ্বারা ব্যবহৃত হয়৷ প্রদত্ত বাস্তবায়ন এটিকে সমর্থন করে (দেখুন NavigationBarFragment.disable() )।

আমরা দৃঢ়ভাবে বৈশিষ্ট্যটি সক্ষম করার এবং সম্ভব হলে AOSP বাস্তবায়ন অনুসরণ করার পরামর্শ দিই। আমরা ডিভাইসগুলির মধ্যে ঘূর্ণন অভিজ্ঞতাকে একই রকম রাখার লক্ষ্য রাখি, আজ বেশিরভাগ ফোনে স্বয়ংক্রিয়-ঘোরানো এবং পোর্ট্রেট লকের মধ্যে অভিজ্ঞতার অভিন্নতাকে মিরর করে।

কাস্টমাইজেশন

যেহেতু ঘূর্ণন পরামর্শগুলি শুধুমাত্র ঘূর্ণন লক করা মোডে প্রদর্শিত হয় (স্বয়ংক্রিয়ভাবে ঘোরানো বন্ধ), এটি ডিফল্টরূপে স্বয়ংক্রিয়-ঘোরানো বন্ধ নির্বাচন করে নতুন ইনস্টলের জন্য বৈশিষ্ট্যটি ডিফল্ট আছে কিনা তা চয়ন করা সম্ভব৷ ডিফল্ট পরিবর্তন করতে SettingsProvider/res/values/defaults.xmldef_accelerometer_rotation দেখুন।

কুইকসেটিংস বা ডিসপ্লে সেটিংসে রোটেট টাইলের মাধ্যমে স্বয়ংক্রিয় ঘূর্ণন সক্রিয় বা না থাকলে (ডিফল্ট নির্বিশেষে) ব্যবহারকারীরা সহজেই পরিবর্তন করতে পারেন।

বৈধতা

পরীক্ষার জন্য, গেটিং সেটিংস পরিবর্তন করে বৈশিষ্ট্যটি বন্ধ এবং চালু করা যেতে পারে Settings.Secure মান। একটি বিশেষাধিকারপ্রাপ্ত adb উদাহরণ থেকে নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে এটি সবচেয়ে সহজে সম্পন্ন হয়েছে:

adb shell settings put secure show_rotation_suggestions <x>

বন্ধের জন্য x 0 এবং চালুর জন্য 1 সেট করুন।

পরীক্ষার জন্য, পরিচিতি মোড সংশ্লিষ্ট সেটিংস পরিবর্তন করে পুনরায় সেট করা যেতে পারে Settings.Secure মান। একটি বিশেষাধিকারপ্রাপ্ত adb উদাহরণ থেকে নিম্নলিখিত কমান্ডটি চালানোর মাধ্যমে এটি সবচেয়ে সহজে সম্পন্ন হয়েছে:

adb shell settings put secure num_rotation_suggestions_accepted 0